![我应该在哪台服务器上执行 ssh 端口转发命令?](https://linux22.com/image/1533605/%E6%88%91%E5%BA%94%E8%AF%A5%E5%9C%A8%E5%93%AA%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%89%A7%E8%A1%8C%20ssh%20%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我有一台 Macbook A
、一台公共服务器B(public IP: 1.2.3.4, internal IP: 10.0.0.2)
、一台内部服务器C(internal IP: 10.0.0.3)
A
B
可以通过 B 的公网 IP连接,也可以通过 C 的私网 IPB
连接,但不能直接连接C
A
C
现在我想C:2345
从连接到A
,所以我想我可以在 中进行端口转发B:1234=>C:2345
?
我应该运行什么命令以及在哪台服务器上运行?
我试过:
ssh -NfR 1234:localhost:2345 10.0.0.3
ssh -L 1234:0.0.0.0:2345 10.0.0.3
两者都不起作用。
答案1
去做确切地您所请求的(B:1234=>C:2345
)应该在以下位置运行B
:
# Not recommended. Read along.
ssh -NgL 1.2.3.4:1234:localhost:2345 10.0.0.3
它还需要1234
在B
防火墙中打开端口。然后1.2.3.4:1234
从外部连接到10.0.0.3:2345
,就像您从本身连接一样C
(通过其环回接口)。任何人都可以连接,所以请记住,如果服务器C
(无论是什么服务器)没有密码保护等。
A
以下是从到 的一种更简单、更安全的方法C
。它不会完全按照您的要求执行,但可能正是您想要的。在 上A
:
ssh -NL 1234:10.0.0.3:2345 1.2.3.4
然后连接到127.0.0.1:1234
以访问上的A
端口。将看到来自 的流量。此连接仅适用于,因此该方法比前一种方法更安全。2345
C
C
B
A
如果您想允许其他计算机(例如:来自 LAN 的计算机A
)连接,您应该使用-g
选项并指定绑定地址。例如:
ssh -NgL A_LAN_address_here:1234:10.0.0.3:2345 1.2.3.4
在这种情况下,请相应地重新配置防火墙A
,然后连接到A_LAN_address_here:1234
。
答案2
在 Mac 上,你首先要执行
ssh -L2345:10.0.0.3:2345 10.0.0.2
这将在你的 Mac 上打开本地端口 2345,该端口可直接连接到 10.0.0.3 上的 :2345
然后,您只需127.0.0.1:2345
在 Mac 上访问即可。任何进入此端口的内容都将通过 ssh 隧道传输到10.0.0.3:2345
。对于该服务器,它将显示为来自10.0.0.2
。