(および関連ツール)を使用してタスクを実行するときに、パスフレーズで保護された 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 キーとパスフレーズが各マシンで機能することを確認しましたが、これをどのように機能させるかはわかりません。
答え1
parallel-ssh
とが同等であると仮定するとpssh
、スイッチを使用してパスフレーズをパイプすることで、実行しようとしている操作は問題なく動作するはずです-A
。
例
host1
ここでは、と の2 つの異なるシステムに接続する例を示しますhost2
。-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/[email protected]:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.
上記が機能すると、私が実行しているコマンドの出力に気づくでしょうecho "hi"
。
あなたの問題
SSH キー ペアのパスフレーズで発生している問題は、バグが原因です。このバグのタイトルは次のとおりです。問題 80: パスフレーズが渡されない?この問題に対する 4 番目のコメントにはパッチが示されています。
抜粋
#4[メールアドレス]
私はその行を
if not ( prompt.strip().lower().endswith('password:') or 'enter passphrase for key' in prompt.strip().lower()):
そしてそれはうまくいくようだ
参考文献
答え2
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
答え3
使用sshエージェント自動的に認証します(新しいシェルにエージェント環境変数を設定するには、シェル名を引数として指定します)。ssh 追加パスワードは一度だけ入力してください。
$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity:
$
$ pssh ...