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


41

端末を使用する標準プロンプトの代わりにグラフィカルプロンプト(GTKなど)を使用してパスフレーズを要求するようにSSHを強制するにはどうすればよいですか?

設定SSH_ASKPASS=/usr/bin/ssh-askpassしてみましたが、効果はないようです。

問題は、opensshのドキュメントに記載されている事実です

sshに端末が関連付けられていないが、 DISPLAYとSSH_ASKPASSが設定されている場合、SSH_ASKPASSで指定されたプログラムを実行し、X11ウィンドウを開いてパスフレーズを読み取ります。

コマンドラインから起動sshは、結果として、私の場合にはgit pushなりますので、それに対応する端末を持っているSSH_ASKPASSロジックを無視しているようです。

私が言及しているのssh-addではなく、鍵ペアが存在するがパスフレーズによって保護されているホストに対する一般的なssh呼び出しに言及していることに注意してください。

回答:


32

#1-パッケージが見つかりませんか?

おそらくを含むパッケージが見つかりませんssh-askpass。インストールしてみてください。

Fedora / CentOS / RHEL:

$ sudo yum install openssh-askpass

Debian / Ubuntu:

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

不足しているユーティリティを見つける

次のコマンドを使用して、不足しているツールを検索できます。

Fedora / CentOS / 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-切断された端末?

最初はこれを見逃していましたが、さらに読んだ後sshSSH_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するためsshには、ターミナル(aka。STDINSTDOUT)を接続しないようにする必要があります。

コマンドを使用してこれを行う1つの方法setsid。気分を悪くしないでください。私もこのツールについて聞いたことがありません。manページから:

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

したがってssh、「プログラム」として実行する場合は、のmanページに記載されている条件を満たす端末から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"

これsshで、パスワードを要求するGUIがポップアップ表示されます。

$ ssh user@skinner

参照資料


ssh-askpass gnomeがインストールされており、手動で起動すると正常に動作します。
gioele

@gioele-アップデートを参照してください、私はそれを理解したと思います。
slm

このソリューションの問題は、各gitまたはrsyncコマンドを変更して、setsid sshinstad of plain を使用する必要があることsshです。
gioele

@gioele-パスワードGUIを「強制」する方法を要求しましたが、これはそれを提供します。次のようなコマンドを置き換えることができssh別名を持つsetsid ssh一つのアプローチです。他の方法があります。制限要因は、ASK_SSHPASSをアクティブにするためにopensshにTTYを接続する必要がないことです。
slm

私はパッケージが欠落していないよ、私は使用することはできませんsetsidで、その後の仕事をし、ssh自分の端末から。それはまったく有効な答えではありません!?さらに、それはUbuntuの古いバージョンで動作していたため、なぜ突然動作しなくなったのか理解できません!
アレクシスウィルケ14年

8

現在のOpenSSHでは実行できません。2013-07:Generalize SSH_ASKPASSの時点で、OpenSSH Bugzillaにこの機能を要求する問題があります。


これは質問に対する答えを提供しません。著者に批判や説明を求めるには、投稿の下にコメントを残してください。
クオンルム

8
@cuonglm「これは不可能です」が答えです。それは間違っているか誤解を招くかもしれません(私はそうは言っていません)が、それはまだ答えです。
テルドン

2

単一のコマンドで端末を閉じる方法があり、ファイルリダイレクトを使用しています。

ssh-add > /dev/null < /dev/null 2>&1

これssh-addにより、端末を閉じた状態でコマンドが実行されます。複雑さを除けば、これはすばらしいことです。しかし、正しいコマンドを知ったので、単にそれをエイリアスにして、以下に追加します~/.bash_aliases

alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"

そして、設定する必要があります。入力ssh-addするだけでエイリアスが呼び出され、すべてのリダイレクトが実行された状態で実際のコマンドが呼び出されます。

ssh-add正しくあなたのダイアログボックスでパスワードを尋ねる...あなたがインストールこれらのパッケージ(Ubuntuのまたはその誘導体で、彼らは他の場所で他の名前を有していてもよい)のいずれかを持っていることを提供:

  • ssh-askpass
  • ssh-askpass-fullscreen
  • ssh-askpass-gnome
  • ksshaskpath
  • kwalletcli
  • lxqt-openssh-askpass
  • razorqt-openssh-askpasss

さて、これらすべてのことはどういう意味ですか?

2>&1手段は、同じ場所のファイルディスクリプタ#1(標準出力)にファイルディスクリプタ#2(標準誤差)をリダイレクトするように向けられています。

この> /dev/null手段/dev/nullは、標準出力をにリダイレクトします。これは、書き込まれたすべてのデータを破棄する特別なファイルです。

この< /dev/null手段は、標準入力を/dev/null(idem)にリダイレクトします。

補足説明として、また話題から外れているが関連する注意として、bashでサービスをプログラムしたい場合は、サービスが実際に何であるか、バックグラウンドにある標準入力、出力、およびエラー終了プロセスを覚えておく必要があります。

service > /dev/null < /dev/null 2>&1 &

唯一の違いは、最後に&が追加されていることに注意してください(さらに、ssh-add理論上のコマンドを変更したという事実service。これらのコマンドは、サービスをバックグラウンドに正しく配置します。


ビクターの詳細な回答ありがとうございます。しかし、それは私の要件に適合しません。質問の最後に書いたように、「私はssh-addではなく、キーペアが存在するがパスフレーズで保護されているホストに対する一般的なssh呼び出しに言及していることに注意してください。」
ジョエレ

そうですか。まあ、sshまったく同じように機能し、以前私が与えた同じ答えがまだ適用されます。のすべての出現を置き換えるだけssh-addssh、設定は完了です。
ビクター

忘れてしまった小さな詳細があります:sshのstdin / stdoutを閉じた場合、sshを介してコマンドを与えるにはどうすればよいですか?;)
ジョエレ

これはssh-add私のために働いた-私はssh-askpassプログラムをポップアップすることである望ましい動作を得るためにstdout / stderrをリダイレクトする必要さえなかった。(それでssh-add < /dev/null十分でした。)
ベン・スターン

0

seahorse-ssh-askpassパッケージgnome-keyringをArchLinuxにインストールせずにタツノオトシゴ(を提供)をインストールしたときにも同じ問題が発生しました。

このパッケージの内容gnome-keyringhttps://www.archlinux.org/packages/extra/i686/gnome-keyring)を見ると、問題の解決に役立つ場合があります。

あなたはタツノオトシゴを使用して気にしない場合はいずれの場合も、あなたはまた、パッケージをインストールすることができseahorse、およびgnome-keyring(またはディストリビューションのための同等のものを)。あなたはGnomeのを使用しない場合は、追加の手順が必要になることがあります:https://wiki.archlinux.org/index.php/GNOME_Keyring

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.