如何在Ansible中通过代理服务器B为目标主机C建立反向隧道
解决Ansible经代理服务器B连接C时建立反向隧道的问题
核心问题在于你之前的ansible_ssh_extra_args参数是作用于主机A到B的SSH连接,而我们需要把反向隧道参数加到主机B到C的SSH连接上。正确的做法是修改ProxyCommand的内容,让B在连接C时带上反向隧道配置。
调整Inventory配置
将你的主机C的Ansible配置修改为如下形式:
[host_c] HOST_C ansible_host=你的C主机IP ansible_user=admin [host_c:vars] # 配置通过B跳转并建立反向隧道的ProxyCommand ansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR -o ProxyCommand="ssh -p 22 -q admin@HOST_B ssh -R 3129:localhost:3128 -W %h:%p admin@%h"' # 为C配置代理环境变量,使其通过反向隧道访问互联网 ansible_env='{"http_proxy": "http://localhost:3129", "https_proxy": "http://localhost:3129"}'
配置说明
- ProxyCommand调整:把
-R 3129:localhost:3128放到了ProxyCommand内部的SSH命令中——这部分命令是在主机B上执行的,用于B连接C时建立反向隧道,将C的3129端口转发到B的3128端口(即Squid服务端口)。 - 环境变量配置:通过
ansible_env为C设置全局代理,确保C上的进程能通过反向隧道访问互联网。 - 原有的
ansible_ssh_extra_args配置可以直接删除,因为它对B到C的连接无效。
验证测试
可以编写简单的Playbook验证联网是否正常:
- name: Verify internet access on C hosts: HOST_C tasks: - name: Check connection to external site command: curl -I https://google.com register: curl_result - debug: var: curl_result.stdout_lines
内容的提问来源于stack exchange,提问作者mickadoo
相关产品推荐
相关产品推荐

