Ansible playbook错误:”在横幅交换期间连接超时”

85次阅读
没有评论

问题描述

在尝试连接到堡垒机主机,然后通过该SSH连接隧道连接到Jenkins主机时,遇到了连接超时的错误。完整的错误消息如下:

fatal: [<bastion-public-ip>]: UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Connection timed out during banner exchange",
    "unreachable": true
}

用户提供了他的清单文件和playbook文件,以及Ansible的版本信息。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据回答1的建议,你在主机变量中定义了多个ansible_ssh_common_args变量,这是不正确的。Ansible只会使用其中一个变量(最后一个)。此外,你尝试通过10.1.0.49访问堡垒机主机(但在问题中没有提到)。我认为,在bastion的主机变量中的第二个ansible_ssh_common_args是错误的。

你可以将变量设置为以下内容:

[bastions:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
...
[jenkins:vars]
ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o ProxyCommand="ssh -o StrictHostKeyChecking=no -W [%h]:%p -q ubuntu@10.1.0.49"'

请注意,忽略主机密钥不是非常“安全”,特别是当你使用堡垒机(它更或多或少是一个你需要信任的中间人)时。

方案2

你可以尝试手动执行Ansible尝试的SSH命令,以查看发生了什么。使用以下命令:

ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/home/qa/.ssh/bastion.pem"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ubuntu"' -o ConnectTimeout=25 -o 'ProxyCommand=ssh -W %h:%p -q ubuntu@10.0.1.49' -o ControlPath=/home/qa/.ansible/cp/13196dcaf6 bastion_public_ip

这将显示详细的SSH连接过程,帮助你找出问题所在。

希望这些解决方案能帮助到你解决问题。如果你有任何其他问题,请随时提问。

正文完