启动服务器到客户端的 ssh 连接

启动服务器到客户端的 ssh 连接

我们可以轻松连接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 会话。

相关内容