如何使用 SSH 隧道作为端口转发的替代方案?

如何使用 SSH 隧道作为端口转发的替代方案?

我想使用 SSH 作为端口转发的替代方案,以便从外部使用我的 RDP 服务器,因为我的 ISP 路由器不允许端口转发。这就是我的想法:

A - client connecting to the RDP server
B - server
C - device running the RDP server

A想要连接到C。直接连接到C是不可能的,所以所有流量都必须流经B。

示例:
A 发送一个包含“Hello world!”的数据包。 C 应该响应“Test OK!”。A 的 IP 是 255.255.255.255 B 的 IP 是 1.2.3.4。 C的IP是4.5.6.7。
因此,255.255.255.255 打开一个到 1.2.3.4 的套接字。 A 发送“Hello world!”。 B 将包裹转发给 C。C 回复“测试成功!”并将其发送回 B。B 将其发送回 A。
我想使用 RDP 服务器执行类似的操作。

B 运行 Debian 8,C 运行 Windows 7。

答案1

您没有说明您的客户端 A 在示例中运行的操作系统。我假设有某种命令行 ssh 客户端可用。然后,您可以使用

 you@A $ ssh -L54321:serverC:3389 serverB -p 12322 -l yourloginnameonB

创建隧道。

该命令行需要一些解释。让我们逐个部分地进行此操作。

  • -L 开关使 SSH 在客户端计算机 A 上的端口 54321(注意提示)和服务器 C 上的端口 3389(我假设 RDP 服务器正在运行)上创建一条隧道。
  • serverB 是您使用此 ssh 命令“定位”的计算机的名称。由于您将通过 B 连接,因此请在此处输入其完整主机名。
  • 如果您的 SSH 服务器 B 使用非标准 ssh 端口(通常建议用于面向互联网的计算机),请将该数字放在这里作为 -p 参数。在我的示例中,B 使用端口 12322 进行 SSH。
  • 最后,-l 参数允许您指定登录 serverB 时使用的登录名(即您的帐户)。

如果此命令成功,您将能够将 A 的 RDP 客户端定向到 localhost:54321,并且感觉就像直接连接到 C:3389。

答案2

假设您的本地计算机(“A”)是一台具有 OpenSSH 等功能的 POSIX 计算机,您可以通过以下两种方式之一执行此操作:

每次使用参数连接到 SSH 客户端时,您都可以临时执行此操作:

ssh -L13389:serverC:3389 username@serverB
rdesktop localhost:13389 # Or point any RDP client to localhost:3389

或者,为了获得更永久的设置,您可以将以下内容添加到您的~/.ssh/config

host serverB
    LocalForward localhost:13389 serverB:3389

然后,每当您 ssh 到 serverB 时,隧道就会打开。然而,这样做的一个副作用是,如果您打开多个到 serverB 的并发连接,您将收到隧道已就位的警告。

相关内容