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

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

(および関連ツール)を使用してタスクを実行するときに、パスフレーズで保護された 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でこれを上書きします。-Huser1@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 ...

関連情報