パスフレーズで保護されたSSHキーを使用したparallel-ssh


8

パスフレーズで保護されたSSHキーをparallel-ssh(および関連ツールを使用して)タスクを実行するときに使用したいと思います。ただし、これを機能させることはできません。

に関するすべてのドキュメントは、parallel-ssh私がこれを使用--askpassまたは-A実行できるはずであることを示しています:

-A
--askpass
      Prompt  for  a  password  and pass it to ssh.  The password may be 
      used for either to unlock a key or for password authentication.  The 
      password is transferred in a fairly secure manner (e.g., it will not 
      show up in argument lists).  However, be aware that a root user on 
      your system could potentially intercept the password.

ただし、キーのパスフレーズを入力すると機能しません。

$ parallel-ssh --hosts=machines --user=my_user --askpass \
    --timeout=0 --inline -v 'sudo apt-get update'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 09:59:36 [FAILURE] amritiii Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[2] 09:59:37 [FAILURE] gbdev Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[3] 09:59:37 [FAILURE] code Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[4] 09:59:37 [FAILURE] apollo Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[5] 09:59:37 [FAILURE] odin Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[6] 09:59:37 [FAILURE] hathor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[7] 09:59:37 [FAILURE] ldap Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[8] 09:59:37 [FAILURE] thor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[9] 09:59:37 [FAILURE] bioserver Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).

私のSSHキーとパスフレーズが各マシンで機能することを確認したので、これを機能させる方法がわかりません。


parallel-sshはpsshと同じだと思いますか?
slm

はい、parallel-sshpssh確かに同じです。
Nathan S. Watson-Haigh 2014年

回答:


5

それが同等であるparallel-sshと想定するとpssh-Aスイッチを使用してパスフレーズをパイプすることで、実行しようとしていることがうまく機能するはずです。

ここで私は2つの異なるシステムに接続する例だ、host1host2-lスイッチを使用してpssh、のデフォルトユーザーを提供しますroot。ただし、ホスト名をとして指定することhost2で、-Hスイッチでこれを上書きしますuser1@host2

$ pssh -A -i -H "host1 user1@host2" -l root 'echo "hi"'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 21:38:00 [SUCCESS] user1@host2
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

X11 forwarding request failed on channel 1
Killed by signal 1.
[2] 21:38:00 [SUCCESS] host1
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

ControlSocket /home/user1/.ssh/master-user1@ssh-tunnel.mydomain.com:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.

上記がうまくいくと、私が実行しているコマンドの出力に気付くでしょうecho "hi"

あなたの問題

SSHキーペアのパスフレーズで実行している問題は、バグが原因です。これは、「バグ80:パスフレーズが渡されない」というタイトルのバグです。。その問題の4番目のコメントはパッチを示しています。

抜粋

#4ロビン... @ gmail.com

行を次のように変更しました

  if not ( prompt.strip().lower().endswith('password:') or 
        'enter passphrase for key' in prompt.strip().lower()):

そしてそれはうまくいくようです

参考文献


入力slmをありがとう。parallel-sshそしてpssh実際に同じです。私はそれが可能であるかどうか尋ねていませんでした-ドキュメントはそれが可能であることを明らかにしています。ドキュメントに記載されているとおりに実際に機能させるのに問題があります。
Nathan S. Watson-Haigh 2014年

1
@ NathanS.Watson-Haigh-更新を参照してください。これはバグです。パッチを参照しました。
slm

これは確かに私に影響を与えている問題です。ただし、の作成者parallel-sshは、パスワードプロンプトの質問を検出して、入力したパスワード/フレーズで応答する方法がまだわからないため、キーチェーン方式を使用します。パスフレーズが誤って間違った質問のプロンプトに表示されてほしくありません。
Nathan S. Watson-Haigh 2014年

1
これは、これがparallel-sshパスフレーズをに渡す際の既知のバグであることがわかったため、回答として受け入れますSSH。ただし、今後この質問に遭遇した場合は、このバグが修正されているか、askpass_client.pyファイルを編集しないことを選択している可能性があります。どちらの場合も、あなたが使用してこの問題を回避することができますkeychain答え(unix.stackexchange.com/a/128998/57414)またはssh-agentの応答(unix.stackexchange.com/a/129022/57414を
ネイサンS.ワトソンをヘーグ

5

私は問題を引き起こしてkeychainいるバグに手動でパッチを当てるのではなく、インストールすることでこれをうまく機能させることができました。

キーチェーンをインストールして手動で実行する

# install keychain package
$ sudo apt-get install keychain

# add my key to the keychain, entering passphrase when asked
$ keychain ~/.ssh/id_rsa

# source the file generated by the above command
$ . ~/.keychain/$(uname -n)-sh

パスワード/パスフレーズを入力せずにコマンドを実行する

今度parallel-sshは、キーチェーンが認証を処理するので、呼び出すときにパスフレーズは必要ありません。

$ parallel-ssh --hosts=machines --user=my_user --timeout=0 'sudo apt-get update'
[1] 14:52:15 [SUCCESS] amritiii 
[2] 14:52:17 [SUCCESS] odin
[3] 14:52:25 [SUCCESS] gmod
[4] 14:53:11 [SUCCESS] bioserver
[5] 14:53:14 [SUCCESS] thor
[6] 14:53:14 [SUCCESS] apollo
[7] 14:53:16 [SUCCESS] gbdev
[8] 14:53:17 [SUCCESS] code
[9] 14:53:18 [SUCCESS] hathor
[10] 14:53:34 [SUCCESS] ldap

ログイン時にキーチェーンを実行する

キーを手動で実行してキーチェーンに追加する代わりに、次のコードをの最後に追加するだけです~/.bash_profile

$ keychain --clear $HOME/.ssh/id_rsa
$ . $HOME/.keychain/$(uname -n)-sh

これにより、再起動後の最初のログイン時に、キーのパスフレーズの入力を求められます。キーは次の再起動まで、または手動でキーチェーンをクリアするまでキーチェーンに残ります。

キーチェーンを使用したCronジョブ

上記を~/.bash_profileファイルに入力すると、cronjobが実行される前に同じファイルを取得することで、キーがキーチェーンに格納されているという事実を利用できます。たとえば、私は毎晩21:00に実行され、SSHを介してリモートコンピュータにデータをコピーするバックアップスクリプトがあります。これは私のcrontab(crontab -e)のエントリです。

 0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh

1

ssh-agentを使用して自動的に認証します(エージェントの環境変数を新しいシェルに設定するには、シェル名を引数として使用します)。ssh-addでキーを追加し、パスワードを1回だけ入力します。

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