sshに常に指定されたプログラムを使用させたいと思いますSSH_ASKPASS
。私の場合、プログラムは単にパスワードを返すbashスクリプトです。
問題は、SSH文書に次のように指定されていることです。
SSHにパスワードが必要な場合端末で実行すると、現在の端末からパスワードが読み込まれます。。
したがって、端末でsshを実行するとSSH_ASKPASS
無視されます。
同様の質問があります: キーパスワードのグラフィカルプロンプトを使用するようにSSHに指示する
以下のようにsshのエイリアスを作成することをお勧めします。
$ alias ssh="setsid ssh"
しかし、sshを直接呼び出さずにgitまたはrsyncから呼び出すので、うまくいきません。
私も一つ見つけた公開質問OpenSSH Bugzillaで修正が要求されましたが、2002年に公開されたため、実装されるとは思いません。
私は奇妙な解決策を考えています。
- スクリプトを呼び出してパスワードを返す偽のSSHエージェントを作成します。
- 新しいSSHプロセスを見つけるプロセスを作成し、SSHがパスワードを要求する前に端末からプロセスを分離します。
より良い提案がありますか?
答え1
マニュアルによると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
答え2
残念ながら、接続している未解決の問題にアクセスすることはできませんが、試してみました。@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(GIT_TRACE=2
詳細出力として設定)によって呼び出されたこの例では、ABCスーパーパスワード「を秘密鍵のパスワードとして使用します。
ノート
DISPLAY
リモート端末にログインすると、通常1が設定解除されます。