Ansible使用跳板机时报banner交换连接超时该如何正确配置?
错误根因分析
Connection timed out during banner exchange报错本质是SSH代理跳转链路不通,你当前配置的ansible_ssh_common_args参数不符合ProxyCommand语法规范:多余添加了ssh前缀,且未配置流量转发到目标主机的逻辑。
正确配置方案
Ansible配置跳板机有两种常用写法,可根据你的跳板机环境选择:
写法1:使用SSH自带-W参数(无需跳板机安装netcat,通用性更高)
--- all: hosts: tencent: ansible_user: "ubuntu" ansible_host: "106.55.XXX.XXX" ansible_ssh_private_key_file: "key.pem" ansible_ssh_common_args: '-o ProxyCommand="ssh -i bastion.key.pem ubuntu@102.106.XXX.XXX -W %h:%p"'
参数说明:
%h会自动替换为你配置的目标主机IP(ansible_host的值),%p自动替换为SSH默认端口22,若目标SSH端口为自定义端口可手动替换对应值。
写法2:使用nc命令(跳板机已安装netcat时可用)
--- all: hosts: tencent: ansible_user: "ubuntu" ansible_host: "106.55.XXX.XXX" ansible_ssh_private_key_file: "key.pem" ansible_ssh_common_args: '-o ProxyCommand="ssh -i bastion.key.pem ubuntu@102.106.XXX.XXX nc %h %p"'
前置验证步骤(必做,可快速定位链路问题)
- 验证本地到跳板机的连通性:本地执行
ssh -i bastion.key.pem ubuntu@102.106.XXX.XXX,确认可以正常登录跳板机 - 验证跳板机到目标主机的连通性:登录跳板机后执行
ssh -i key.pem ubuntu@106.55.XXX.XXX,确认可以正常登录目标主机 - 验证本地到目标主机的整条代理链路:本地执行下方命令,确认可以直接通过跳板机登录目标主机后,再执行Ansible命令即可
ssh -i key.pem ubuntu@106.55.XXX.XXX -o ProxyCommand="ssh -i bastion.key.pem ubuntu@102.106.XXX.XXX -W %h:%p"
特殊场景提示:若跳板机或目标主机的SSH端口为非默认22,需要在对应SSH命令中添加
-p 自定义端口参数,比如跳板机SSH端口为2222时,ProxyCommand内跳板机部分改为ssh -p 2222 -i bastion.key.pem ubuntu@102.106.XXX.XXX -W %h:%p即可。
内容的提问来源于stack exchange,提问作者Cherie
相关产品推荐
相关产品推荐

