我在AWS实例上运行Ansible playbook时遇到问题。这是我的版本:
$ 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"
}
现在,在此广告资源上运行我的Playbook时,我收到错误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实例?我错过了什么?
答案 0 :(得分:7)
这个错误有一个git问题会影响Ansible 2.x的各种版本https://github.com/ansible/ansible/issues/13278#issuecomment-216307695
我的解决方案只是将timeout=30
添加到/etc/ansible/ansible.cfg
。
这不是“任务”或“角色”超时并且足以解决错误(我确实有一些角色/任务需要比这更长的时间)。
答案 1 :(得分:1)
对于ec2实例,有时设置阶段会花费更多时间,您需要将 ansible.cfg 中的超时值更改为timeout=40
之类的内容。这会将超时值设置为40秒。
答案 2 :(得分:0)
在目标计算机上运行
sudo apt-get install python-simplejson
答案 3 :(得分:0)
我像下面那样运行命令,它可以工作: 命令:
ansible-playbook -c paramiko httpd.yml
答案 4 :(得分:0)
检查目标服务器上旧版本的sudo是否存在问题。某些旧的sudo版本没有-n选项可以使用。
答案 5 :(得分:0)
我为系统修复了此错误,因为我忘记更改了ansible配置文件:
sudo vim /etc/ansible/ansible.cfg
尝试注释可能试图通过sudo到根的特权参数。
像这样:
[privilege_escalation]
#become=True
#become_method=su
#become_user=root
#become_ask_pass=False
#become_exe="sudo su -"
我尝试通过ssh登录的帐户没有权限成为root用户。
答案 6 :(得分:0)
我的情况是因为我的剧本有
become_method: su
become_flags: "-"
提示在主机上输入密码。
添加ansible-playbooks … --ask-become-pass
并通过密码即可解决问题。
答案 7 :(得分:0)
我正在通过有限的DNS支持在隔离的网络上为AWS,QEMU和VBox构建安全的VM映像。将SSH超时增加到40秒对我的情况影响有限。
我正在使用Packer v1.5.5,Ansible v2.9.2和OpenSSH v7.4p1
我的解决方案是将UseDNS
中的/etc/ssh/ssd_config
参数更改为no
。
我在RHEL / CentOS kickstart配置中添加了以下几行,效果很好。
%post
# Disable DNS lookups by sshd to address Ansible timeouts
perl -npe 's/^#UseDNS yes/UseDNS no/g' -i /etc/ssh/sshd_config
%end
答案 8 :(得分:0)
Ansible 默认 ssh_args 设置,如此处记录的 https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-ssh-args,是
-C -o ControlMaster=auto -o ControlPersist=60s
并通过将 ControlMaster
更改为 yes
(或 no
)为我解决了问题(以某种方式):
ansible.cfg:
[ssh_connection]
ssh_args = -C -o ControlMaster=yes -o ControlPersist=60s
答案 9 :(得分:0)
我遇到了同样的问题。我能够通过添加 become_exe 来解决它:sudo su -
- hosts: "{{ host | default('webservers')}}"
become: yes
become_user: someuser
become_method: su
become_exe: sudo su -
答案 10 :(得分:-1)
vim /etc/ansible/ansible.cfg
timeout = 10 ( change to 60 )