如何使用Ansible创建SSH隧道?现有配置连接跳板机超时求解决
Ansible 建立 SSH 跳板隧道的必要配置与排障建议
基础连通性检查
- 首先确认发起隧道的被控主机(Ansible 任务的执行对象)可以正常访问跳板机
MyJumpHost的 22 端口,可手动在被控主机执行命令验证:nc -zv MyJumpHost 22,超时问题90%以上都是安全组、防火墙未放通对应端口,或跨网路由不可达导致。 - 确认跳板机
MyJumpHost的入站规则放通了被控主机的IP访问22端口的权限。
服务端 SSH 配置要求
- 跳板机
MyJumpHost和最终目标主机remoteHost的 SSH 配置文件/etc/ssh/sshd_config需开启转发权限:- 确保
AllowTcpForwarding yes配置已打开 - 确保
PermitOpen无额外限制(默认无限制即可) - 修改配置后执行
systemctl restart sshd生效
- 确保
本地密钥与权限配置
- 被控主机上的认证密钥
/home/{{ inventory_hostname }}/.ssh/myPem.pem权限必须为 600,属主需和执行 Ansible 任务的远程用户一致,可添加前置任务确保配置正确:
- name: 修正SSH密钥权限 ansible.builtin.file: path: /home/{{ inventory_hostname }}/.ssh/myPem.pem mode: '0600' owner: '{{ ansible_user }}' group: '{{ ansible_user }}'
- 确认该密钥的公钥已经同时添加到跳板机相应用户和
remoteHost上myUser用户的~/.ssh/authorized_keys文件中。
Ansible 任务优化
- 原命令中的
"是HTML转义字符,会导致参数解析错误,直接用原生引号即可,优化后的命令示例如下,同时添加超时和保活参数避免隧道意外断开:
tasks: - name: Open SSH Tunnel ansible.builtin.shell: cmd: 'ssh -L *:3376:localhost:3306 -fN -o ConnectTimeout=10 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o "ProxyJump MyJumpHost" -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /home/{{ inventory_hostname }}/.ssh/myPem.pem myUser@remoteHost' executable: /bin/bash register: tunnel_result
调试方案
如果仍出现超时,可在ssh命令中添加 -v 参数输出详细连接日志,同时运行playbook时加上 -v 参数,即可定位是网络层问题还是认证、配置层面的问题。
内容的提问来源于stack exchange,提问作者Bix
相关产品推荐
相关产品推荐

