web-dev-qa-db-ja.com

パスフレーズで保護されたssh-private-keyでansible-playbookを実行する方法は?

Amazonに自動スケーリンググループEC2があり、packerでAMIを作成するときに公開キーを追加して、ホストに対してansible-playbookとsshを実行できるようにしました。

しかし、このようなプレイブックを実行すると問題が発生しますansible-playbook load.ymlパスワードを書く必要があるというメッセージが表示されます

キー「/Users/XXX/.ssh/id_rsa」のパスフレーズを入力します。
キー「/Users/XXX/.ssh/id_rsa」のパスフレーズを入力します。
キー「/Users/XXX/.ssh/id_rsa」のパスフレーズを入力します。

問題は、パスワードを受け入れないことです(パスワードを正しく入力していると確信しています)。

その後、ask-passフラグでパスワードを送信できるため、コマンドをansible-playbook load.yml --ask-passに変更しましたが、ある程度の進捗はありましたが、他のタスクでは再びパスワードを要求しましたが、しませんでした私のパスワードを受け入れます

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

 [WARNING]: No inventory was parsed, only implicit localhost is available

 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'


PLAY [localhost] *************************************************************************************************************

TASK [ec2_instance_facts] ****************************************************************************************************
ok: [localhost]

TASK [add_Host] **************************************************************************************************************
changed: [localhost] => (item=xx.xxx.xx.xxx)
changed: [localhost] => (item=yy.yyy.yyy.yyy)

PLAY [instances] *************************************************************************************************************

TASK [Copy gatling.conf] *****************************************************************************************************
ok: [xx.xxx.xx.xxx]
ok: [yy.yyy.yyy.yyy]
Enter passphrase for key '/Users/ccc/.ssh/id_rsa': Enter passphrase for key '/Users/ccc/.ssh/id_rsa':
Enter passphrase for key '/Users/ccc/.ssh/id_rsa':
Enter passphrase for key '/Users/ccc/.ssh/id_rsa':
Enter passphrase for key '/Users/ccc/.ssh/id_rsa':

ask-passフラグを使用しないと、タスク[Copy gatling.conf]が完了せず、ホストにアクセスできなかったという苦情が出ます。フラグを追加することで、この部分はうまくいきますが、私の次のタスクは再びパスを要求します。

この問題をどのように解決すればよいですか?ここで何が間違っていますか?

12
Am1rr3zA

ssh-addを1回実行して解決し、パスワードで保護されていない場合のように使用します。

7
Am1rr3zA

Ansibleでは、パスフレーズで保護された秘密キーを保存するオプションはありません

そのためには、ssh-agentにパスフレーズで保護された秘密鍵を追加する必要があります

バックグラウンドでssh-agentを起動します。

# eval "$(ssh-agent -s)"

SSH秘密鍵をssh-agentに追加します

# ssh-add ~/.ssh/id_rsa

ここで、ホストに対してansible-playbookとsshを実行してみてください。

20
Javeed Shakeel