You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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"}'

配置说明

  1. ProxyCommand调整:把-R 3129:localhost:3128放到了ProxyCommand内部的SSH命令中——这部分命令是在主机B上执行的,用于B连接C时建立反向隧道,将C的3129端口转发到B的3128端口(即Squid服务端口)。
  2. 环境变量配置:通过ansible_env为C设置全局代理,确保C上的进程能通过反向隧道访问互联网。
  3. 原有的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:50:25