SshがSSH_ASKPASS
で指定されたプログラムを常に使用するように強制します。私の場合、プログラムはパスフレーズを返すbashスクリプトです。
問題は、sshのドキュメントにあるとおりです。
Sshがパスフレーズを必要とする場合、ターミナルから実行された場合、現在のターミナルからパスフレーズを読み取ります。
したがって、ターミナルからsshを実行すると、SSH_ASKPASS
は無視されます。
同様の質問があります: SSHにキーパスフレーズのグラフィカルプロンプトを使用するように伝えます
このようにsshのエイリアスを作成することを提案しています
$ alias ssh="setsid ssh"
sshを直接呼び出さないため、動作しません。gitまたはrsyncから呼び出されます。
OpenSSH Bugzillaで修正を求める open issue も見つけましたが、2002年にオープンされたため、実装されるとは思いません。
私はおそらく奇妙な解決策を考えています:
より良いsugestion?
ssh
マニュアルごと:
ssh
に端末が関連付けられていないが、DISPLAYとSSH_ASKPASSが設定されている場合、SSH_ASKPASSで指定されたプログラムが実行されます。
したがって、ターミナルの関連付けを解除し(パイプを追加するなど)、DISPLAY
が設定されていないことを確認する必要があります(パスフレーズにターミナルを使用する場合)。
簡単な例:
echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh ...
ssh-add
と同じ:
$ echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh-add id_rsa
ssh_askpass: exec(/my/cmd): No such file or directory
残念ながら、リンクした未解決の問題にアクセスできませんが、 @ npostavs 'の提案(DISPLAY
をいくつかの値に設定)を試してみましたが、機能しているようです1。
例えば:
# List heads in a remote git repo
DISPLAY=: setsid git ls-remote -h [email protected]:NFL/tests.git
どこ
$ cat ${SSH_ASKPASS}
#!/bin/bash
echo ABCSuperPassword
この例では、SSH_AGENT
はgitによって呼び出されます(set GIT_TRACE=2
verboser出力の場合)秘密キーのパスワードとして「ABCSuperPassword」を効果的に提供します。
1DISPLAY
は、リモート端末にログインした場合、多くの場合設定されません。