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

如何通过两台代理主机实现SSH动态端口转发?

实现多级SSH跳转的动态SOCKS代理

方法一:直接使用SSH命令行跳转

SSH 7.3及以上版本支持-J(ProxyJump)参数,可直接串联跳转主机,同时在本地建立动态端口转发:

ssh -D 8080 -J root@123.123.123.1,root@123.123.123.2 user@123.123.123.3

参数说明:

  • -D 8080:在本地机器的8080端口创建SOCKS5代理,所有发往该端口的请求会通过SSH隧道转发至Host3,再由Host3访问互联网。
  • -J:按顺序指定中间跳转主机,逗号分隔,链路为本地→Host1→Host2→Host3。

执行命令后保持终端窗口打开,在Firefox中配置代理:

  • 打开Firefox设置→网络设置
  • 选择“手动配置代理”
  • SOCKS主机填localhost,端口填8080
  • 勾选“SOCKS v5”和“远程DNS”(确保DNS请求也通过代理转发)

若SSH版本低于7.3,不支持-J参数,可使用ProxyCommand嵌套写法:

ssh -D 8080 -o ProxyCommand="ssh -W %h:%p root@123.123.123.1 -o ProxyCommand='ssh -W %h:%p root@123.123.123.2'" user@123.123.123.3

方法二:配置~/.ssh/config简化操作

编辑本地机器的~/.ssh/config文件,添加以下内容:

Host host1
    HostName 123.123.123.1
    User root

Host host2
    HostName 123.123.123.2
    User root
    ProxyJump host1

Host host3
    HostName 123.123.123.3
    User user
    ProxyJump host2

保存后,直接执行以下命令即可建立本地SOCKS代理:

ssh -D 8080 host3

后续Firefox代理配置与方法一一致。

原命令失败原因

你之前执行的命令:

ssh -D 8081 root@123.123.123.1 ssh -D 8082 root@123.123.123.2 ssh -D 8083 root@123.123.123.3

问题在于:

  • -D 8081是在本地绑定端口,但登录Host1后执行的ssh -D 8082是在Host1上绑定端口,ssh -D 8083是在Host2上绑定端口,这些端口均不在本地机器上,Firefox无法通过它们访问Host3的代理。
  • 该写法未建立本地到Host3的完整隧道,只是在每台中间机单独开启转发,无法让本地流量通过完整链路抵达Host3。

内容的提问来源于stack exchange,提问作者robertinho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:27:13