我们可以轻松连接ssh
到具有公共 IP 的远程计算机。
但现在我有一台没有公共 IP 的远程计算机,我需要从有公共 IP 的计算机连接到它。因此,远程计算机应该启动此连接(添加客户端)。
我需要它,因为我祖父的计算机没有公共IP,他有时需要系统方面的帮助。
在Windows上的类似情况下,我使用了VNC连接(通过TightVNC),TightVNC服务器有一个选项“添加客户端”:用户刚刚输入客户端的IP(即我的公共IP),我的客户端已经处于“侦听模式”,并且当“服务器”添加客户端时,连接被初始化。
那么,是否可以通过 SSH 连接执行相同的技巧?
答案1
根据定义,客户端是发起连接的一方。
对于你的问题,我认为一个简单的解决方案是建造一条反向隧道。
在没有公网IP的电脑上:
ssh -R 2222:localhost:22 loginOfServerWithPublicIP@publicIP
这通过 SSH 连接到服务器,并构建从端口 2222 上具有公共 IP 的服务器到端口 22 (SSH) 上没有公共 IP 的计算机的隧道。
然后在服务器上:
ssh -p 2222 loginOfComputerWithoutPublicIP@locahost
连接通过第一隧道从服务器的端口 2222 重定向到计算机的端口 22。您可能想要使用类似的工具autossh
来使隧道更具弹性(即关闭时自动重新启动)。
答案2
为了消除远程、客户端、主机、服务器等名称的歧义,我创建了一个图表,其中本地 PC (LPC-1) 需要 SSH 到远程 PC (RPC-2),本地 PC 和远程 PC 都位于各自的网络后面他们的路由器及其公共IP地址。用户无法修改远程路由器的端口转发设置,但用户可以访问本地路由器来修改端口转发设置。
[![如何在网络内的两台计算机之间进行 SSH][1]][1]
- 本地用户帐户:userLPC1
- 远程用户帐户:userRPC2
上面两条命令翻译为:
RPC2> ssh -f -N -T -R2222:localhost:22 42.48.128.49
LCP1> ssh -p 2222 userRPC2@localhost
然而,LPC1 也位于防火墙(即本地路由器 (LR))后面。可以确认本地路由器 (LR) 将端口 2222 转发到 LPC1。
我怀疑ssh -p 2222 userRPC2@localhost
在 LPC1 上运行是否会到达 RPC2,因为 LPC1 不在公共网络上。
我希望有人会使用这些图来提供更清晰的步骤来在 LPC1 和 RPC2 之间创建 SSH 会话。