sshが常にSSH_ASKPASSを使用するように強制する

sshが常にSSH_ASKPASSを使用するように強制する

sshに常に指定されたプログラムを使用させたいと思いますSSH_ASKPASS。私の場合、プログラムは単にパスワードを返すbashスクリプトです。

問題は、SSH文書に次のように指定されていることです。

SSHにパスワードが必要な場合端末で実行すると、現在の端末からパスワードが読み込まれます。

したがって、端末でsshを実行するとSSH_ASKPASS無視されます。

同様の質問があります: キーパスワードのグラフィカルプロンプトを使用するようにSSHに指示する

以下のようにsshのエイリアスを作成することをお勧めします。

$ alias ssh="setsid ssh"

しかし、sshを直接呼び出さずにgitまたはrsyncから呼び出すので、うまくいきません。

私も一つ見つけた公開質問OpenSSH Bugzillaで修正が要求されましたが、2002年に公開されたため、実装されるとは思いません。

私は奇妙な解決策を考えています。

  1. スクリプトを呼び出してパスワードを返す偽のSSHエージェントを作成します。
  2. 新しい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_AGENTgit(GIT_TRACE=2詳細出力として設定)によって呼び出されたこの例では、ABCスーパーパスワード「を秘密鍵のパスワードとして使用します。

ノート

DISPLAYリモート端末にログインすると、通常1が設定解除されます。

関連情報