Windows 10上的本机SSH端口转发(隧道)

时间:2020-01-09 10:47:01  来源:igfitidea点击:

在本文中,我们将展示如何使用内置的Windows 10 OpenSSH服务器通过" SSH隧道"转发端口。 SSH端口转发使我们可以将应用程序端口从本地计算机隧道(转发)到远程服务器,反之亦然。较早的SSH隧道仅在Linux/Unix环境中使用,但是今天我们也可以在Windows 10/Windows Server 2015中使用它。这是一个有关如何在Windows上通过SSH隧道(TCP端口22)使用RDP连接的案例研究。

SSH隧道通常用于需要连接到防火墙后面的远程计算机的情况。例如,我们有一台仅打开SSH端口(TCP 22)的Windows Server。所有其他端口均被硬件防火墙或者Windows防火墙阻止。任务是使用RDP客户端连接到Windows Server。由于远程桌面端口3389被防火墙阻止,因此这似乎是不可能的。但是,我们可以通过SSH隧道使用端口转发技术。

以下是SSH隧道的典型使用方案:

  • "本地TCP转发"是到远程服务器的本地端口转发。
  • "远程TCP转发"是到本地计算机的远程端口转发。
  • "双重SSH隧道"通过SSH服务器(如果不适用OpenVPN解决方案)将没有任何专用公用IP地址的计算机连接到NAT之后。

通过SSH隧道进行RDP访问(本地TCP转发)

在这种模式下,我们将在计算机上创建本地TCP端口。到该端口的所有连接都会通过SSH隧道转发到远程服务器上的指定端口。在此示例中,我们将创建本地端口" 8888",并将其连接转发到远程Windows计算机上的RDP端口" 3389"。常规连接方案如下所示。

要使用内置的Windows 10 SSH客户端(从Windows 10 1809和Windows Server 2019开始的Windows的一部分)创建SSH隧道,请运行以下命令:

ssh -L 8888:192.168.1.90:3389 [email protected]

要使SSH隧道在后台工作,请添加f参数。

要通过SSH隧道连接到远程计算机桌面,我们需要使用RDP客户端(mstsc.exe)连接到计算机的本地端口8888:

127.0.0.1:8888

登录到远程计算机并在RDP会话中安全地工作(但是我们还记得防火墙仍关闭了端口3389)。我们可以使用TCPView工具来确保RDP连接是本地的(RDP连接由本地运行的SSH服务器启动)。

请注意,如果我们转发未加密的应用流量,则会在公共网络上以加密方式传输该流量。此类流量将在SSH连接的一端进行加密,并在另一端进行解密。

即使不允许直接连接(通过SSH和RDP),本地网络中的其他计算机也可以使用此模式连接到RDP服务器。为此,它们必须通过创建了SSH隧道的RDP客户端连接到计算机上的端口号8888:

mstsc.exe /v 10.10.1.220:8888

远程TCP转发到本地计算机

还有另一个SSH隧道用例远程TCP转发。使用SSH隧道,可以允许远程服务器访问计算机上的本地端口或者本地网络中另一台计算机上的端口。例如,我们希望外部服务器(200.168.1.90)访问Intranet站点(不在Internet上发布)。要创建反向SSH隧道,请使用以下命令:

ssh -R 8080:internalwww:80 [email protected]

要从远程SSH服务器访问internalwwww站点,只需在浏览器中键入以下地址即可:

http://localhost:8080

在所有Windows版本中,我们都可以使用以下命令创建端口转发规则

netsh interface portproxy command

使用SSH隧道,我们可以构建端口转发链。要启用或者禁用SSH隧道,请在OpenSSH配置文件(%programdata%\ ssh `sshd_config)中添加以下指令之一:

AllowStreamLocalForwarding yes
AllowTcpForwarding remote