Ansible Timeout(12s)等待特权升级提示

时间:2016-09-16 14:06:31

标签: amazon-ec2 ansible-playbook ansible-2.x

我在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实例?我错过了什么?

11 个答案:

答案 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

SSH超时

timeout = 10 ( change to 60 )