キーパスワードのグラフィカルプロンプトを使用するようにSSHに指示する

キーパスワードのグラフィカルプロンプトを使用するようにSSHに指示する

パスワードを要求するために端末の標準プロンプトを使用する代わりに、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には「関連端末がありません」と表示されます。そして DISPLAYSSH_ASKPASS設定しました。これに気づくことが重要です。したがって、sshこれを使用するには、端末を未接続のままにする必要がSSH_ASKPASSあります(別名「&」)。sshSTDINSTDOUT

1つの方法は、次のコマンドを使用してこれを行うことです。setsid。悲しくないでください。私もこのツールについて聞いたことがありません。マニュアルページから:

setid - 新しいセッションでプログラムを実行する

したがって、「プログラム」として実行すると、sshマニュアルページに記載されている基準に従って端末からsetsid切り離すことができます。その他の標準設定は次のとおりです。sshssh

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

したがって、これらすべてを総合すると次のようになります。

$ setsid ssh user@remotehost

たとえば、

$ setsid ssh user@skinner

                                       GuiのSSに聞いてください

離れた

setsid「組み込み」にするには、次のエイリアスを作成できます。

$ alias ssh="setsid ssh"

これでsshGUIをポップアップし、パスワードを求めます。

$ ssh user@skinner

引用する

答え2

この問題を解決するのに19年かかりました。OpenSSHのバグ69 - 一般パスワード要求

OpenSSH 8.4には、force | prefer | neverオプションを受け入れる$ SSH_ASKPASS_REQUIRE変数が含まれています。

SSH_ASKPASS_REQUIRE をデフォルト設定に設定すると、ssh-addssh-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 pullAskpassダイアログボックスが正しく表示され、パスワードを一度だけ尋ねます。

お役に立てば幸いです。

答え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-keyringhttps://www.archlinux.org/packages/extra/i686/gnome-keyring)問題を解決するのに役立ちます。

とにかく、海馬を使用することが気に入らない場合は、パッケージとseahorsegnome-keyringまたは配布に対応するもの)をインストールすることもできます。 Gnomeを使用していない場合は、追加の手順を実行する必要があります。https://wiki.archlinux.org/index.php/GNOME_Keyring

関連情報