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