AWSインスタンスでAnsibleプレイブックを実行できません。これが私のバージョンです:
_$ ansible --version
ansible 2.0.0.2
_
私は在庫ファイルを次のように作成しました:
_[my_ec2_instance]
default ansible_Host=MY_EC2_ADDRESS ansible_user='ubuntu' ansible_ssh_private_key_file='/home/MY_USER/MY_KEYS/MY_KEY.pem'
_
サーバーへの接続のテスト:
_$ ansible -i provisioner/inventory my_ec2_instance -m ping
default | SUCCESS => {
"changed": false,
"ping": "pong"
}
_
このインベントリでプレイブックを実行すると、次のようなエラーTimeout (12s) waiting for privilege escalation Prompt
が発生します。
_$ ansible-playbook -i provisioner/inventory -l my_ec2_instance provisioner/playbook.yml
PLAY [Ubuntu14/Python3/Postgres/Nginx/Gunicorn/Django stack] *****
TASK [setup] *******************************************************************
fatal: [default]: FAILED! => {"failed": true, "msg": "ERROR! Timeout (12s) waiting for privilege escalation Prompt: "}
NO MORE HOSTS LEFT *************************************************************
PLAY RECAP *********************************************************************
default : ok=0 changed=0 unreachable=0 failed=1
_
_.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
_を在庫パラメーターとして使用して同じプレイブックを実行すると、Vagrantインスタンスで完全に機能します(プレイブック/ロール自体に問題がないことを証明しています)
また、_-vvvv
_を使用して実行する場合は、_exec ssh
_行をコピーして手動で実行すると、問題なくAWSに接続されます。
EC2インスタンスに接続するには、インベントリファイルに他のパラメーターを追加する必要がありますか?何が欠けていますか?
このエラーに関するgitの問題があり、Ansible 2.xのさまざまなバージョンに影響します https://github.com/ansible/ansible/issues/13278#issuecomment-216307695
私の解決策は、単にtimeout=30
を/etc/ansible/ansible.cfg
に追加することでした。
これは「タスク」または「ロール」のタイムアウトではなく、エラーを解決するのに十分でした(私はそれよりはるかに時間がかかるいくつかのロール/タスクがあります)。
これをターゲットコンピュータで実行します
Sudo apt-get install python-simplejson
Ansible設定ファイルを変更したのを忘れたので、システムのこのエラーを修正しました:
Sudo vim /etc/ansible/ansible.cfg
Sudoをrootにしようとしている可能性のある特権パラメーターをコメント化してみてください。
そのようです:
[privilege_escalation]
#become=True
#become_method=su
#become_user=root
#become_ask_pass=False
#become_exe="Sudo su -"
Rootになる権限がないため、sshしようとしたアカウント。
移行先サーバーで古いバージョンのSudoに問題がないか確認してください。古いSudoバージョンの中には、-nオプションを使用できないものがあります。
Ec2インスタンスのセットアップフェーズに時間がかかることがあります。タイムアウト値をansible.cfgでtimeout=40
のように変更する必要があります。これにより、タイムアウト値が40秒に設定されます。
安全なVM AWS、QEMU、VBoxのイメージを分離されたネットワーク上で構築し、DNSサポートを制限しています。SSHタイムアウトを40秒に増やすと、状況に影響が限定されました。
Packer v1.5.5、Ansible v2.9.2、OpenSSH v7.4p1を使用しています
私の解決策は、/etc/ssh/ssd_config
のUseDNS
パラメータをno
に変更することでした。
RHEL/CentOSキックスタート構成に次の行を追加したところ、すばらしい結果が得られました。
%post
# Disable DNS lookups by sshd to address Ansible timeouts
Perl -npe 's/^#UseDNS yes/UseDNS no/g' -i /etc/ssh/sshd_config
%end
私は次のようにコマンドを実行しました&それは動作します:command:
ansible-playbook -c paramiko httpd.yml
私の場合、それは私のプレイブックに
become_method: su
become_flags: "-"
これは、ホストでパスワード要求を要求します。
ansible-playbooks … --ask-become-pass
を追加してパスワードを渡すことで問題は解決しました。
vim /etc/ansible/ansible.cfg
timeout = 10 ( change to 60 )