我想实现一个代理,它的中间有两个服务器(A和B)。流量从我的计算机到服务器B,然后到服务器A,然后获取数据。我在~/..ssh/config中发现了这样的配置:
HOST B
HostName B
user debian
DynamicForward 0.0.0.0:1081我可以使用我的1081端口作为代理。但现在我不知道如何代理所有B通过A的流量。
这是我的ssh版本:
OpenSSH_7.2p2 Ubuntu-4 ubuntu2.8,OpenSSL 1.0.2g,2016年3月1日
发布于 2019-11-22 20:29:03
B只是处理它得到的一切。A必须根据其数据选择在哪里检索数据。显然只有A应该有DynamicForward隧道,B的角色只是连接的中间主机。通常B只需要一个经典的LocalForward就可以将查询呈现给A。
这可以通过不同的方式完成,但最简单和最安全的方法利用了ProxyJump特性,它将显示A就好像它是可直接访问的,因此不再需要考虑B将如何与预期的端口转发交互。人们可以认为B几乎是无形的。因此,下面的配置最终可以放在~/.ssh/config中:
Host B
User userb
Host A
User usera
ProxyJump B
DynamicForward 1081仅在以下情况下调用:
ssh A如果没有配置文件,等效的命令行将是:
ssh -D 1081 -J userb@B usera@A更新:如果ssh的版本超过7.3 (看起来是用于OP的),ProxyJump仍然可以被ProxyCommand +ssh -W替换,如下所示:
作为配置文件~/.ssh/config:
Host B
User userb
Host A
User usera
ProxyCommand ssh -W %h:%p B
DynamicForward 1081或者没有配置文件,则使用等效的命令行:
ssh -D 1081 -o 'ProxyCommand ssh -W %h:%p userb@B' usera@ASOCKS5 API将在客户端上作为localhost:1081 (除非将0.0.0.0:1081 (或使用网关/-g)用于其他客户端)可用。在外壳下,由一对管道处理,派生的子ssh进程将通过主机B建立隧道,并将A的ssh服务器呈现给初始的ssh命令:整个ssh是隧道化的,这就是为什么不需要配置特定的附加端口转发。
https://unix.stackexchange.com/questions/553681
复制相似问题