首页 文章

ansible playbook [setup]收集事实 - SSH UNREACHABLE连接在 Banner 期间超时

提问于
浏览
1

我在Mac机器上 .

$ which ansible
/Library/Frameworks/Python.framework/Versions/3.5/bin/ansible

或者我想, ansible 可以位于一个通用位置: /usr/bin/ansible (例如:在CentOS / Ubuntu上) .

$ ansible --version
ansible 2.2.0.0

从我的其他vagrant / Ubuntu框中运行以下playbook工作正常 .

Playbook文件如下所示:

- hosts: all
  become: true
  gather_facts: true

  roles:
    - a_role_which_just_say_hello_world_debug_msg

从我的本地机器,我可以成功 ssh 到目标服务器/以下服务器(没有任何密码,因为我已经使用 ssh-add 添加了.pem密钥文件),这在Ansible playbook的 [Setup] (收集事实步骤)中失败了跑 .

在Mac机器上,我有时会收到此错误(不是每次都有) . 错误: Failed to connect to the host via ssh: Connection timed out during banner exchange . PS:这个问题并非一直存在 .

$ ansible-playbook -i inventory -l tag_cluster_mycluster myplabook.yml

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [myclusterSomeServer01_i_07f318688f6339971]
fatal: [myclusterSomeServer02_i_03df6f1f988e665d9]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Connection timed out during banner exchange\r\n", "unreachable": true}

好的,尝试了几次,相同的行为,在15个服务器中(我在mycluster集群中), [SETUP] 设置在收集事实设置期间失败并且下次它正常工作 .

Retried: $ ansible-playbook -i inventory -l tag_cluster_mycluster myplabook.yml

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [myclusterSomeServer01_i_07f318688f6339971]
ok: [myclusterSomeServer02_i_03df6f1f988e665d9]
ok: [myclusterSomeServer03_i_057dfr56u88e665d9]
...
.....more...this time it worked for all servers.

如上所述,这次上面的步骤运行正常 . 在某些任务/操作(我正在尝试使用Ansible yum 模块安装某些东西)时会发生同样的问题(SSH连接超时) . 如果我再试一次,它对上次失败的服务器工作正常但是它可能会对于上次成功的另一台服务器失败 . 因此,行为是随机的 .

我的/etc/ansible/ansible.cfg文件有:

[ssh_connection]
scp_if_ssh = True

1 回答

  • 2

    将以下 timeout 设置添加到/etc/ansible/ansible.cfg配置文件时,我将其增加到25.当它是10或15时,由于连接超时 Headers 问题,我仍然看到某些服务器中的错误 .

    [defaults]
    timeout = 25
    
    [ssh_connection]
    scp_if_ssh = True
    

    除了上述之外,我不得不使用 serial: Nserial: N% (其中N是一个数字)一次在N个数字或百分比的服务器上运行我的剧本,然后它运行正常 .

    - hosts: all
      become: true
      gather_facts: true
      serial: 2
      #serial: "10%"
      #serial: "{{ serialNumber }}"
      #serial: "{{ serialNumber }}%"
    
      vars:
       - serialNumber: 5
    
      roles:
        - a_role_which_just_say_hello_world_debug_msg
    

相关问题