SSH隧道 (也称为SSH端口转发)只是通过SSH将本地网络流量路由到远程主机。 这意味着您使用加密保护所有连接。 它提供了一种设置基本VPN ( 虚拟专用网络 )的简便方法,可用于通过不安全的公共网络(如Internet)连接到专用网络。
您还可以通过安全隧道将NAT和防火墙后面的本地服务器暴露给Internet,如ngrok中所实现的那样 。
SSH会话默认允许隧道网络连接,有三种类型的SSH端口转发: 本地 , 远程和动态端口转发。
在本文中,我们将演示如何在Linux中快速轻松地设置SSH隧道或不同类型的端口转发。
测试环境:
出于本文的目的,我们使用以下设置:
- 本地主持人 :192.168.43.31
- 远程主机 :带主机名server1.example.com的 Linode CentOS 7 VPS 。
通常,您可以使用SSH安全地连接到远程服务器,如下所示。 在此示例中,我在本地和远程主机之间配置了无密码SSH登录 ,因此它没有要求用户管理员密码。
$ ssh [email protected]
无密码连接远程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:8080
或192.168.43.31:8080
,如下面的屏幕截图所示。
通过本地SSH端口转发访问远程应用程序
远程SSH端口转发
远程端口转发允许您从远程计算机连接到本地计算机。 默认情况下,SSH不允许远程端口转发。 您可以使用远程主机上的SSHD主配置文件/ etc / ssh / sshd_config中的GatewayPorts指令启用此功能。
使用您喜欢的命令行编辑器打开文件进行编辑。
$ sudo vim /etc/ssh/sshd_config
查找所需的指令,取消注释并将其值设置为yes
,如屏幕截图所示。
GatewayPorts yes
启用远程SSH端口转发
保存更改并退出。 接下来,您需要重新启动sshd以应用最近所做的更改。
$ sudo systemctl restart sshd OR $ sudo service sshd restart
接下来,运行以下命令将远程计算机上的端口5000转发到本地计算机上的端口3000 。
$ ssh -f -N [email protected] -R 5000:localhost:3000
一旦理解了这种隧道方法,就可以通过安全隧道轻松安全地将本地开发服务器(特别是NAT和防火墙后面)暴露给Internet。 像Ngrok , pagekite , localtunnel等许多隧道以类似的方式工作。
动态SSH端口转发
这是第三种类型的端口转发。 与允许与单个端口进行通信的本地和远程端口转发不同,它可以在一系列端口上进行全方位的TCP通信。 动态端口转发将您的计算机设置为默认情况下监听端口1080的SOCKS代理服务器 。
对于初学者来说, SOCKS是一种Internet协议,它定义了客户端如何通过代理服务器(在本例中为SSH)连接到服务器。 您可以使用-D选项启用动态端口转发。
以下命令将在端口1080上启动SOCKS代理,允许您连接到远程主机。
$ ssh -f -N -D 1080 [email protected]
从现在开始,您可以通过编辑设置并配置它们以使用它来连接到远程服务器,从而使您的计算机上的应用程序使用此SSH代理服务器。 请注意,关闭SSH会话后, SOCKS代理将停止工作。
另 请 参阅 : 关闭SSH后保持远程SSH会话运行的5种方法
概要
在本文中,我们解释了从一台机器到另一台机器的各种类型的端口转发,用于通过安全SSH连接隧道传输流量。 这是SSH的很多用途之一。 您可以通过下面的反馈表单将您的声音添加到本指南中。
注意 :SSH端口转发有一些相当大的缺点,可能会被滥用:它可以用于旁路网络监控和流量过滤程序(或防火墙)。 攻击者可以将其用于恶意活动。 在下一篇文章中,我们将展示如何禁用SSH本地端口转发。 保持联系!