You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过多跳SSH创建SOCKS代理以访问远端HTTP应用

如何通过多跳SSH创建SOCKS代理以访问远端HTTP应用

嗨,我来帮你搞定这个多跳SSH的SOCKS代理问题!你的需求是让本地4321端口的流量经过HostA、HostB,最终访问HostX上的HTTP应用,这个其实用SSH自带的参数就能轻松实现,我给你两种常用的方法:

方法一:用-J(Jump)参数简化操作(推荐,适合OpenSSH 7.3及以上版本)

这个参数是OpenSSH后来新增的,专门用来处理多跳场景,写法非常简洁:

ssh -D 4321 -J HostA HostB -N

我给你拆解下每个参数的作用:

  • -D 4321:在本地开启4321端口作为SOCKS5代理,所有发往这个端口的流量都会走SSH隧道转发;
  • -J HostA:指定先通过HostA跳转,SSH会自动先连接HostA,再通过HostA建立到HostB的连接;
  • -N:告诉SSH不要在远程主机上执行任何命令,只保持连接用来做转发,避免不必要的资源消耗。

方法二:用ProxyCommand实现兼容(适合老版本SSH)

如果你的SSH版本比较老,不支持-J参数,可以用ProxyCommand来手动指定跳转逻辑:

ssh -D 4321 -o ProxyCommand="ssh -W %h:%p HostA" HostB -N

这里的-W %h:%p是让HostA把流量转发到目标主机HostB的对应端口,相当于让HostA做一个“中转桥梁”,把本地的SSH流量传递到HostB上。

纠正你之前的错误尝试

你之前写的ssh -D 4321 -o ProxyCommand='ssh -J HostA' HostB -N之所以报错,是因为ProxyCommand需要的是一个能直接建立到目标主机(HostB)连接的命令,而ssh -J HostA并没有指定要连接到HostB,所以SSH不知道该往哪转发流量,自然会输出用法提示啦。

设置好之后,你只需要把浏览器或其他应用的SOCKS代理设置为localhost:4321,就能通过这个多跳隧道访问HostX上的HTTP应用了!

备注:内容来源于stack exchange,提问作者Fravadona

火山引擎 最新活动