问题描述
在尝试连接到堡垒机主机,然后通过该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连接过程,帮助你找出问题所在。
希望这些解决方案能帮助到你解决问题。如果你有任何其他问题,请随时提问。
正文完