如何在Linux中创建SSH隧道或端口转发

在本文中,我们将演示如何在Linux中快速轻松地设置SSH隧道或不同类型的端口转发。

SSH隧道 (也称为SSH端口转发)只是通过SSH将本地网络流量路由到远程主机。 这意味着您使用加密保护所有连接。 它提供了一种设置基本VPN虚拟专用网络 )的简便方法,可用于通过不安全的公共网络(如Internet)连接到专用网络。

您还可以通过安全隧道将NAT和防火墙后面的本地服务器暴露给Internet,如ngrok中所实现的那样

SSH会话默认允许隧道网络连接,有三种类型的SSH端口转发: 本地远程动态端口转发。

在本文中,我们将演示如何在Linux中快速轻松地设置SSH隧道或不同类型的端口转发。

测试环境:

出于本文的目的,我们使用以下设置:

  1. 本地主持人 :192.168.43.31
  2. 远程主机 :带主机名server1.example.com的 Linode CentOS 7 VPS

通常,您可以使用SSH安全地连接到远程服务器,如下所示。 在此示例中,我在本地和远程主机之间配置了无密码SSH登录 ,因此它没有要求用户管理员密码。

$ ssh [email protected]  
无密码连接远程SSH

无密码连接远程SSH

本地SSH端口转发

这种类型的端口转发允许您从本地计算机连接到远程服务器。 假设您位于限制性防火墙后面,或者被外发防火墙阻止访问远程服务器上端口3000上运行的应用程序。

您可以转发本地端口(例如8080 ),然后您可以使用该端口在本地访问应用程序,如下所示。 -L标志定义转发到远程主机和远程端口的端口。

$ ssh [email protected] -L 8080: server1.example.com:3000

添加-N标志意味着不执行远程命令,在这种情况下你不会得到shell。

$ ssh -N [email protected] -L 8080: server1.example.com:3000

-f开关指示ssh在后台运行。

$ ssh -f -N [email protected] -L 8080: server1.example.com:3000

现在,在本地计算机上打开浏览器,而不是使用地址server1.example.com:3000访问远程应用程序,您只需使用localhost:8080192.168.43.31:8080 ,如下面的屏幕截图所示。

通过本地SSH端口转发访问远程应用程序

通过本地SSH端口转发访问远程应用程序

远程SSH端口转发

远程端口转发允许您从远程计算机连接到本地计算机。 默认情况下,SSH不允许远程端口转发。 您可以使用远程主机上的SSHD主配置文件/ etc / ssh / sshd_config中GatewayPorts指令启用此功能。

使用您喜欢的命令行编辑器打开文件进行编辑。

$ sudo vim /etc/ssh/sshd_config 

查找所需的指令,取消注释并将其值设置为yes ,如屏幕截图所示。

GatewayPorts yes
启用远程SSH端口转发

启用远程SSH端口转发

保存更改并退出。 接下来,您需要重新启动sshd以应用最近所做的更改。

$ sudo systemctl restart sshd
OR
$ sudo service sshd restart 

接下来,运行以下命令将远程计算机上的端口5000转发到本地计算机上的端口3000

$ ssh -f -N [email protected] -R 5000:localhost:3000

一旦理解了这种隧道方法,就可以通过安全隧道轻松安全地将本地开发服务器(特别是NAT和防火墙后面)暴露给Internet。 Ngrokpagekitelocaltunnel等许多隧道以类似的方式工作。

动态SSH端口转发

这是第三种类型的端口转发。 与允许与单个端口进行通信的本地远程端口转发不同,它可以在一系列端口上进行全方位的TCP通信。 动态端口转发将您的计算机设置为默认情况下监听端口1080SOCKS代理服务器

对于初学者来说, SOCKS是一种Internet协议,它定义了客户端如何通过代理服务器(在本例中为SSH)连接到服务器。 您可以使用-D选项启用动态端口转发。

以下命令将在端口1080上启动SOCKS代理,允许您连接到远程主机。

$ ssh -f -N -D 1080 [email protected]

从现在开始,您可以通过编辑设置并配置它们以使用它来连接到远程服务器,从而使您的计算机上的应用程序使用此SSH代理服务器。 请注意,关闭SSH会话后, SOCKS代理将停止工作。

参阅关闭SSH后保持远程SSH会话运行的5种方法

概要

在本文中,我们解释了从一台机器到另一台机器的各种类型的端口转发,用于通过安全SSH连接隧道传输流量。 这是SSH的很多用途之一。 您可以通过下面的反馈表单将您的声音添加到本指南中。

注意 :SSH端口转发有一些相当大的缺点,可能会被滥用:它可以用于旁路网络监控和流量过滤程序(或防火墙)。 攻击者可以将其用于恶意活动。 在下一篇文章中,我们将展示如何禁用SSH本地端口转发。 保持联系!