我有三台机器:
- 我有物理访问权限
localhost
- 我想通过 ssh 进入
host1
。但是,它位于运营商级 NAT 后面,因此我无法从 ssh 直接进入localhost
relayhost
是为了帮助我从 连接localhost
到host1
我想要从每个localhost
和host1
到ssh relayhost
,然后将relayhost
我的 ssh 连接从localhost
中继到host1
。
这个答案建议我如果知道 的 URI 或 IP 地址,就可以在relayhost
使用上创建隧道。但是,由于运营商级 NAT,我不知道这一点。因此,我可以想象一个像这样中继的过程:ssh -L
host1
- 在
host1
,ssh user@relayhost
relayhost
正在监视此连接,当它看到时,它会说“我将从我的端口 9999 创建一个到此连接的隧道”- 在
localhost
,ssh 9999:relayhost
这是正确的做法吗?我该如何进行第 2 步?
答案1
您不需要在 上设置任何专门的触发器relayhost
。您需要做的就是使用 进行远程端口转发,ssh -R
而不是使用 进行本地端口转发ssh -L
。
现在,如果我理解正确的话,您的问题是 和 都localhost
没有可公开访问的 IP,两者都位于 NAT 之后。否则,创建从到的隧道,然后在该隧道内运行第二个 SSH 连接host1
会更容易。host1
localhost
ssh -R
如果我们必须使用中继,可以按照以下步骤进行。为了清楚起见,让我们将您的localhost
机器重命名为myhost
now。
运行此命令
host1
:ssh -R 12345:localhost:22 user@relayhost
这将打开端口
12345
,relayhost
当有人连接到它时,数据将被转发到22
上的SSH 端口host1
。现在您可以从 连接到
12345
端口。relayhost
myhost
ssh user@relayhost -p 12345
如果您有限制性防火墙
relayhost
禁止外部访问端口12345
,则可以使用本地端口转发在本地打开端口myhost
:ssh -N -L 56789:localhost:12345 user@relayhost
然后连接
host1
到myhost
:ssh user@localhost -p 56789
但是不要指望在远程端口转发上构建任何永久的网络解决方案(请参阅:https://serverfault.com/q/595323以防将来可能出现的问题)。您应考虑使用开启服务器的 VPN 进行relayhost
长期设置。