![SSH - 如何建立三台计算机隧道?](https://linux22.com/image/7374/SSH%20-%20%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E4%B8%89%E5%8F%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E9%9A%A7%E9%81%93%EF%BC%9F.png)
ComputerA 通过 putty 连接到服务器的端口 77,并且从服务器的端口 6666 到 ComputerA 的端口 22 设置了反向隧道。ComputerA 还具有一个使用名为 ComputerA_user_name 的用户帐户设置的 ssh 服务器。
我可以使用命令从 ComputerB ssh 到服务器ssh admin@Server -p 9000 -D 6000
。然后我在我的计算机ComputerB上运行一个ruby程序,它在端口6000上建立了socks代理连接,并通过Server运行。如何让 ruby 程序通过代理从 ComputerB 连接到 ComputerA?
我现在尝试的是从 ComputerB ssh 到服务器后,在服务器上运行此命令ssh -D 9000 localhost -p 6666 -l ComputerA_user_name
以从 ComputerB 绑定到服务器,然后从服务器绑定到 ComputerA,但它给了我消息,bind: Address already in use
。
答案1
我找到了答案
https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
通过中间主机的 SOCKS 代理
如果你想通过中间主机打开 SOCKS 代理,可以:
$ ssh -L 8001:localhost:8002 [email protected] -t ssh -D 8002 [email protected]
客户端将在本地主机的 8001 端口上看到一个 SOCKS 代理,它实际上是到 machine1 的连接,流量最终将通过 machine2 进入和离开网络。本地主机上的端口 8001 连接到 machine1 上的端口 8002,该端口是 machine2 的 SOCKS 代理。端口号可以根据需要选择,但转发特权端口仍然需要 root 权限。
所以就我而言,我使用了:
ssh -L 6000:localhost:6001 -p 9000 admin@ip
ssh -D 6001 -p 6666 localhost -l username -N