ansible-playbook 等待 ssh 超时并出现 ping 错误,但可以在本地工作

问题描述 投票:0回答:2

我正在尝试通过我的 ansible-playbook 文件 ssh 到 ec2 实例。我可以在本地 ssh 进入实例,并且当前在我的 ansible-playbook 文件中具有以下配置:

- name: Wait for SSH to come up
  delegate_to: "{{ public_dns }}"
  wait_for_connection:
    delay: 60
    timeout: 120
  with_items: "{{ public_ip }}"
  remote_user: ubuntu
  connection: ssh
  register: item

但是,当我运行此程序时,出现以下错误:

失败:[localhost -> {{ public_dns }}] (item={'_ansible_item_result': 真,'_ansible_no_log':假,'_ansible_delegate_vars': {'ansible_delegate_host':u'{{ public_dns }}','ansible_host':u'{{ public_dns }}'},'更改':假,'经过':184,'失败':真, 'item': u'{{ public_ip }}', 'msg': u"等待 ping 模块超时 测试成功:'ping'",'_ansible_ignore_errors':无}) => {"已更改": false,“elapsed”:184,“item”:“{{ public_ip }}”,“msg”:“超时 等待 ping 模块测试成功:'ping'"}

当我从我的机器上 ping public_dns 或 public_ip 值时,均成功。

为什么运行 Ansible 文件时 ping 事件会失败? (我并不是故意尝试 ping 实例,实际上我想通过 ssh 连接到它。但是,错误表明 Ansible 可能在连接之前尝试 ping 实例,基于“等待 ping 模块测试成功超时” ”)

我已经将方法更改为:

- name: Add new instance to host group
  add_host:
  hostname: ""{{ public_ip }}"
  groupname: launched

- name: Wait for SSH to come up
  wait_for:
    host: launched
    port: 22
    sleep: 30
    delay: 10
    timeout: 360
  state: started

但是,这引发了不同的错误,“等待启动时超时:22”回溯包括以下内容:

connect_socket = socket.create_connection((host, port), connect_timeout) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py”,第 557 行,在 create_connection 中 对于 getaddrinfo(host, port, 0, SOCK_STREAM) 中的资源:。

有什么想法吗?

amazon-ec2 ansible
2个回答
3
投票

请注意,Ansible ping 模块ICMP Ping 不同:https://docs.ansible.com/ansible/2.5/modules/ping_module.html。当使用 ping 模块时,Ansible 将尝试通过

ssh
连接到目标主机

如果上述任务位于针对新配置的 ec2 实例运行的 playbook 中,我将设置

gather_facts: false
并运行
wait_for_connection
作为我的第一个任务。如果还是失败,尝试加大
timeout
参数


0
投票

正如@peteris 所建议的,我的问题是没有安装 sshpass 程序。尽管我连接的服务器使用 SSH 密钥身份验证,但我提供了 -kK 选项,这使得 ansible 认为它需要 sshpass,尽管实际上并不需要。即使使用 -vvvv 也没有错误或警告。

© www.soinside.com 2019 - 2024. All rights reserved.