如何在 Linux 中创建 SSH 隧道或端口转发
SSH 隧道(也称为 SSH 端口转发)只是将本地网络流量通过 SSH 路由到远程主机。这意味着您的所有连接都使用加密进行保护。它提供了一种设置基本VPN(虚拟专用网络)的简单方法,可用于通过不安全的公共网络(如互联网)连接到专用网络。
您还可以通过安全隧道将 NAT 和防火墙后面的本地服务器暴露给互联网,就像在ngrok中实现的那样。
[ 你可能还喜欢:如何保护和强化 OpenSSH 服务器]
SSH会话默认允许隧道网络连接,并且有三种类型的 SSH 端口转发:本地、远程和动态端口转发。
在本文中,我们将演示如何在 Linux 中快速轻松地设置 SSH 隧道或不同类型的端口转发。
测试环境:
为了本文的目的,我们使用以下设置:
- 本地主机:192.168.43.31
- 远程主机:Linode CentOS 7 VPS,主机名为server1.example.com。
通常,你可以使用 SSH 安全地连接到远程服务器,如下所示。在此示例中,我在本地和远程主机之间配置了无密码 SSH 登录,因此它不会要求输入用户 admin 的密码。
$ ssh admin@server1.example.com
本地 SSH 端口转发
这种类型的端口转发可让您从本地计算机连接到远程服务器。假设您位于限制性防火墙后面或被传出防火墙阻止访问远程服务器上端口3000上运行的应用程序。
您可以转发本地端口(例如8080),然后可以使用该端口在本地访问应用程序,如下所示。-L
标志定义转发到远程主机的端口和远程端口。
$ ssh admin@server1.example.com -L 8080:server1.example.com:3000
添加-N
标志意味着不执行远程命令,在这种情况下您将不会获得shell。
$ ssh -N admin@server1.example.com -L 8080:server1.example.com:3000
该-f
开关指示 ssh 在后台运行。
$ ssh -f -N admin@server1.example.com -L 8080:server1.example.com:3000
现在,在本地机器上打开浏览器,不需要使用地址server1.example.com:3000访问远程应用程序,而是可以直接使用localhost:8080
或192.168.43.31:8080
,如下面的屏幕截图所示。
远程 SSH 端口转发
远程端口转发允许您从远程计算机连接到本地计算机。默认情况下,SSH 不允许远程端口转发。您可以使用远程主机上SSHD 主配置文件/etc/ssh/sshd_config中的GatewayPorts指令启用此功能。
使用您最喜欢的命令行编辑器打开文件进行编辑。
$ sudo vim /etc/ssh/sshd_config
找到所需的指令,取消注释,并将其值设置为yes
,如屏幕截图所示。
GatewayPorts yes
保存更改并退出。接下来,您需要重新启动 sshd 以应用您最近所做的更改。
$ sudo systemctl restart sshd OR $ sudo service sshd restart
接下来运行以下命令将远程计算机上的端口5000转发到本地计算机上的端口3000 。
$ ssh -f -N admin@server1.example.com -R 5000:localhost:3000
了解了这种隧道方法后,您就可以轻松安全地通过安全隧道将本地开发服务器(尤其是位于 NAT 和防火墙后面的服务器)暴露给互联网。Ngrok、pagekite、localtunnel 等隧道以及许多其他隧道的工作方式类似。
动态 SSH 端口转发
这是第三种端口转发。与允许与单个端口通信的本地和远程端口转发不同,它使跨一系列端口进行全方位的 TCP 通信成为可能。动态端口转发默认将您的计算机设置为侦听端口1080的SOCKS 代理服务器。
首先,SOCKS是一种互联网协议,它定义了客户端如何通过代理服务器(本例中为 SSH)连接到服务器。您可以使用-D选项启用动态端口转发。
以下命令将在端口1080上启动 SOCKS 代理,允许您连接到远程主机。
$ ssh -f -N -D 1080 admin@server1.example.com
从现在开始,您可以通过编辑设置并配置应用程序来使用此 SSH 代理服务器,从而让计算机上的应用程序使用该 SSH 代理服务器连接到远程服务器。请注意,关闭 SSH 会话后, SOCKS代理将停止工作。
另请参阅:关闭 SSH 后保持远程 SSH 会话运行的 5 种方法
概括
在本文中,我们解释了从一台机器到另一台机器的各种类型的端口转发,用于通过安全的 SSH 连接隧道传输流量。这是 SSH 的众多用途之一。您可以通过下面的反馈表为本指南发表您的意见。
注意:SSH 端口转发有一些明显的缺点,它可能被滥用:它可用于绕过网络监控和流量过滤程序(或防火墙)。攻击者可以利用它进行恶意活动。在下一篇文章中,我们将展示如何禁用 SSH 本地端口转发。保持连接!