パスワードを要求するために端末の標準プロンプトを使用する代わりに、SSHにグラフィックプロンプト(GTKなど)を使用させるにはどうすればよいですか。
設定してみましたがSSH_ASKPASS=/usr/bin/ssh-askpass
うまくいかないようです。
問題はopensshドキュメントに次のように記載されているという事実です。
SSHの場合接続端末がありません。DISPLAYとSSH_ASKPASSが設定されている場合は、SSH_ASKPASSで指定されたプログラムを実行し、X11ウィンドウを開き、パスワードを読み込みます。
コマンドラインからsshを起動すると、私の場合、結果は次のようになりますgit push
。〜する関連付けられた端末があるため、SSH_ASKPASS
ロジックが無視されるようです。
ここでは、SSHに言及するのではなく、キーペアが存在するがパスワードで保護されてssh-add
いるホストへの一般的なSSH呼び出しに言及していることに注意してください。
答え1
#1 - パッケージが紛失しましたか?
includeが欠落している可能性がありますssh-askpass
。インストールしてみてください。
Fedora/セントOS/RHEL:
$ sudo yum install openssh-askpass
Debian/Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
不足しているユーティリティを探す
次のコマンドを使用して、欠落しているツールを検索できます。
Fedora/セントOS/RHEL:
$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X
Debian/Ubuntu:
$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
#2 - ターミナル接続が切断されましたか?
最初はこれを見逃していましたが、もっと読むと、環境変数のssh
マニュアルSSH_ASKPASS
ページでこのコメントが見つかりました。
抜粋
SSH_ASKPASS If ssh needs a passphrase, it will read the passphrase from the
current terminal if it was run from a terminal. If ssh does not
have a terminal associated with it but DISPLAY and SSH_ASKPASS
are set, it will execute the program specified by SSH_ASKPASS
and open an X11 window to read the passphrase. This is particularly
useful when calling ssh from a .xsession or related script.
(Note that on some machines it may be necessary to redirect the
input from /dev/null to make this work.)
コメントで見つかった場合、sshには「関連端末がありません」と表示されます。そして DISPLAY
&SSH_ASKPASS
設定しました。これに気づくことが重要です。したがって、ssh
これを使用するには、端末を未接続のままにする必要がSSH_ASKPASS
あります(別名「&」)。ssh
STDIN
STDOUT
1つの方法は、次のコマンドを使用してこれを行うことです。setsid
。悲しくないでください。私もこのツールについて聞いたことがありません。マニュアルページから:
setid - 新しいセッションでプログラムを実行する
したがって、「プログラム」として実行すると、ssh
マニュアルページに記載されている基準に従って端末からsetsid
切り離すことができます。その他の標準設定は次のとおりです。ssh
ssh
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
したがって、これらすべてを総合すると次のようになります。
$ setsid ssh user@remotehost
たとえば、
$ setsid ssh user@skinner
離れた
setsid
「組み込み」にするには、次のエイリアスを作成できます。
$ alias ssh="setsid ssh"
これでssh
GUIをポップアップし、パスワードを求めます。
$ ssh user@skinner
引用する
答え2
この問題を解決するのに19年かかりました。OpenSSHのバグ69 - 一般パスワード要求。
OpenSSH 8.4には、force | prefer | neverオプションを受け入れる$ SSH_ASKPASS_REQUIRE変数が含まれています。
SSH_ASKPASS_REQUIRE をデフォルト設定に設定すると、ssh-add
ssh-askpass ユーザインタフェースが端末で起動します。私のArch Linuxシステムの私のディレクトリには次のものがあります。.xinitrc
export SSH_ASKPASS=/usr/lib/ssh/x11-ssh-askpass
export SSH_ASKPASS_REQUIRE=prefer
eval `keychain --eval --noask ~/.ssh/id_rsa`
私の中には~/.ssh/config
私がいます。
AddKeysToAgent yes
したがって、再起動後に初めて私のプロジェクトの1つを実行すると、git pull
Askpassダイアログボックスが正しく表示され、パスワードを一度だけ尋ねます。
お役に立てば幸いです。
答え3
8.4より前のバージョンのOpenSSHではこれを行うことはできません。詳細については、2002年からこの機能が必要で、2021年1月に最終的に修正されたOpenSSH Bugzillaの問題を読んでください。まとめSSH_ASKPASS。
OpenSSH バージョン 8.4+ については、以下を参照してください。受け入れられた回答これを達成するために使用する方法の簡単な説明ですSSH_ASKPASS_REQUIRE
。
答え4
パッケージをインストールせずにArchLinuxにSeahorse(提供)をインストールしたときにもseahorse-ssh-askpass
同じ問題が発生しました。gnome-keyring
このパッケージの内容を見るgnome-keyring
(https://www.archlinux.org/packages/extra/i686/gnome-keyring)問題を解決するのに役立ちます。
とにかく、海馬を使用することが気に入らない場合は、パッケージとseahorse
(gnome-keyring
または配布に対応するもの)をインストールすることもできます。 Gnomeを使用していない場合は、追加の手順を実行する必要があります。https://wiki.archlinux.org/index.php/GNOME_Keyring。