假设有三台计算机,A、B、C。
计算机 A 需要通过端口 9103 连接到计算机 C。
但是它无法到达 C。但它可以到达计算机 B,而计算机 B 可以到达计算机 C。
我知道这可以通过 ssh 隧道来完成。然而,让事情变得复杂的是,由于防火墙的原因,计算机 A 无法 ssh 进入计算机 B,但 B 可以 ssh 进入计算机 A。因此可以从 B 创建反向 SSH 隧道,以便 A 可以到达 B。
有没有办法在计算机B上创建隧道,使得计算机A可以通过计算机B到达计算机C?
答案1
在B上创建一条从A:59103开始的反向隧道。相对于 B 的端点是 C:9103。
ssh -R 59103:C:9103 A
将 A 上的端口号从 59103 更改为合适的端口号。
该解决方案采用您的陈述,即 B 可以从表面上达到 C。从 B 到 C 的连接不受 保护ssh
。
答案2
如果您想要稍微花哨一点,您可以nc
按需建立一个隧道(如果nc
安装在 B 上),如下所示(来自主机 A):
$ ssh C -oProxyCommand='ssh -q B nc C 9103'
该代理命令意味着到ssh
B 并运行nc
连接到 C 上的端口 9103 作为来自 A 的 ssh 连接的隧道。
如果这是您经常做的事情,您应该将其放入~/.ssh/config
主机 A 上,并执行以下操作:
host C
ProxyCommand ssh -q B nc C 9103
那么命令行很简单:
$ ssh C