给定一个 SSH 隧道 ABC,如何排除 B?

给定一个 SSH 隧道 ABC,如何排除 B?

我已经使用 3 台机器 ( ABC) SSH 设置一段时间了。和A都是C我想要连接的两个不同 LAN 上的机器,并且B是我自己的带有公共地址的盒子。

在机器上A我这样做:

ssh -p 443 -f -N -R 1987:localhost:22 hostname-of-B

在机器上C我有这个~/.ssh/config

Host hostB
  User user-of-B
  HostName hostname-of-B

Host hostA
  User user-of-A
  ProxyCommand ssh -o 'GatewayPorts yes' -q hostB nc -q0 localhost 1987

所以我可以从C到连接A

ssh hostA

这个设置工作得很好,直到我不得不切换B到另一台互联网连接较差的机器。现在,A尽管C连接良好,但一切都超级慢。

C所以我想知道在建立从到 的A初始连接后是否可以建立从到 的B直接连接。这样就可以消除等式并再次加快连接速度。ACB

答案1

不,这是不可能的。您需要一些公开的内容来转发。或者对于一台服务器对另一台服务器的每个连接的可见性。

答案2

如果您有任何其他具有公共 ssh 访问权限的机器 X,您可能可以避免速度慢的 B。这可以是您家里的机器,也可以是非常便宜的租用的具有良好连接的公共虚拟机。

在 C 上,您可以打开从 X 回到 C 的反向隧道:

ssh -Nf -R 10022:localhost:22  user-of-X@hostname-of-X

然后在 A 上通过 X 添加另一个“hop-config”

Host hostAviaX
  User user-of-X
  ProxyCommand ssh -o 'GatewayPorts yes'-q hostB nc -q0 localhost 10022

在 A 上ssh hostAviaX应该可以工作。

注意如果 A 是你的在您控制路由器的网络中的客户端计算机上,您可以启用端口转发,以便 A 具有公共 ssh 访问权限。在这种情况下,您不需要另一个 X,您可以替换上面示例中的 X == A。

相关内容