我有三台机器:
localhost
host1
. 但是,它位于运营商级 NAT 之后,因此我无法从 ssh 直接连接到它localhost
relayhost
设置为帮助我连接localhost
到host1
我想SSH从每个localhost
并host1
到relayhost
,然后有relayhost
中继从我的ssh连接localhost
到host1
。
这样的回答表明,我可以创建一个通道relayhost
使用ssh -L
,如果我知道的URI或IP地址host1
。但是,由于运营商级 NAT,我不知道。所以我可以想象一个像这样中继它的过程:
host1
,ssh user@relayhost
relayhost
正在监视这个连接,当它看到它说“我要创建一个从我的端口 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)
然后连接到host1
from myhost
:
ssh user@localhost -p 56789
Run Code Online (Sandbox Code Playgroud)但是,不要期望在远程端口转发上构建任何永久网络解决方案(请参阅:https : //serverfault.com/q/595323以了解未来可能出现的问题)。您应该考虑在服务器上使用 VPNrelayhost
进行长期设置。
归档时间: |
|
查看次数: |
3923 次 |
最近记录: |