如果您在不同的网络上连接不同的 Linux 设备,那么您必须将其暴露在公共互联网上,这可能会使您的系统和文件面临风险。 因此,SSH 隧道用于以快速且安全的方式将数据从源计算机传输到客户端计算机,反之亦然。
SSH 隧道是一种在服务器机器和客户端机器之间创建安全和加密的 SSH 连接的做法,通过它可以传输数据并可以中继服务。 在我们今天的文章中,我们将看到如何设置 SSH 隧道并通过 SSH 隧道安全地路由您的流量。
什么是 SSH 隧道?
SSH 隧道是通过加密通道传输未加密流量或数据的方式。 简单地说,您可以说它是一种以安全方式将数据从一个地方传输到另一个地方的隧道。 除了文件传输之外,SSH Tunneling 还可以用于跨防火墙访问内网服务和实现 VPN。
SSH 隧道也称为 SSH 转发,它是一种使用加密协议 (FTP) 传输数据、绕过防火墙和访问受地理限制的内容的简单有效的方法。
SSH 端口转发分为三种类型:
- 本地端口转发
- 远程端口转发
- 动态端口转发
本地转发
本地转发是将一个端口从客户端机器(本地 SSH 客户端)转发到远程机器(SSH 服务器),然后将连接转发到目标机器的另一个端口的做法。
SSH 客户端检查特定给定端口上的连接,当它收到连接请求时,它会将连接隧道连接到远程 SSH 服务器上的特定端口。 然后服务器在配置的端口上连接到不同的目标机器。
它主要用于从外部连接到内部网络上的远程服务,如数据库。 它还用于通过 Internet 和通过跳转服务器进行远程文件共享。
如何设置本地端口转发?
举个例子,你被防火墙限制访问运行在远程服务器上的3000端口的应用程序。现在,我们将转发一个本地端口(即8080)在本地访问应用程序。
这 -L
用于配置本地端口转发
ssh [email protected] -L 8080:server1.example.com:3000
或者
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER
- [LOCAL_IP:]LOCAL_PORT – 本地机器的端口号和 IP 地址。 可以使用任何大于 1024 的端口号。
- 目的地:DESTINATION_PORT – 目标机器的端口和 IP 地址或主机名。
- [[email protected]]SERVER_IP – 远程 ssh 用户的用户名和服务器 IP 地址。
这 -f
将指示 ssh 在后台运行。
ssh -f -N [email protected] -L 8080:server1.example.com:3000
而 -N
将指示不要执行远程命令。 [you will not get a shell in this case.]
ssh -N [email protected] -L 8080:server1.example.com:3000
现在,在您的本地机器上打开浏览器,您可以简单地使用 localhost:8080 来访问远程应用程序,而不是使用地址 server.example.com:3000 来访问它。
远程转发
远程端口转发与本地端口转发相反,它使您能够从远程机器连接到本地计算机。 SSH 默认不支持远程端口转发。 所以你需要在你的 ssh 配置文件中启用它。
在编辑模式下打开 ssh 配置文件
sudo vim /etc/ssh/sshd_config
搜索 GatewayPorts 并将其设置为 yes。
GatewayPorts yes
Save 更改,退出编辑模式,然后重新启动服务器。
sudo systemctl restart sshd
现在您已启用远程端口转发。 在开放式 SSH 中,我们使用 -R 命令来设置远程端口转发。
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER
- [REMOTE:]远程端口 – 远程 SSH 服务器的 IP 地址和端口号。
- 目的地:DESTINATION_PORT – 目标机器的主机名和 IP 地址。
- [[email protected]]SERVER_IP – 远程 SSH 用户名和 IP 地址。
例如:
ssh -R 8080:127.0.0.1:3000 -N -f [email protected]
SSH 服务器将侦听端口 8080,并将所有流量从 8080 隧道传输到本地计算机上的端口 3000
或者,您可以使用以下命令将远程机器上的 5000 端口转发到本地机器上的 3000 端口。
ssh -f -N [email protected] -R 5000:localhost:3000
远程端口转发主要用于让某人从外部访问内部服务。
动态端口转发
第三种也是最后一种类型的端口转发是动态端口转发。 本地和远程端口转发允许您与单个端口建立隧道和通信,但在动态端口转发中,您可以运行并与一系列端口进行通信。
它在本地机器上创建一个套接字作为 SOCKS 代理服务器,或者你可以说它把你的本地机器设置为 SOCKS 代理服务器,默认情况下,它监听端口 1080。当服务器连接到这个端口时,它是转发到远程机器,然后通过动态端口转发到动态机器。
什么是袜子?
它是一种 Internet 协议,用于定义客户端计算机如何通过代理连接到服务器。
我们可以使用 -D 选项启用动态端口转发。 让我们通过一个例子来理解端口转发——
ssh -D [LOCAL_IP:]LOCAL_PORT [[email protected]]SSH_SERVER
- [LOCAL_IP:]LOCAL_PORT – 本地机器的 IP 地址和端口号。
- [[email protected]]SERVER_IP – 远程服务器 IP 地址和用户名。
或者此命令将启动 SOCKS 代理并允许您连接到远程主机。
ssh -f -N -D 1080 [email protected]
结论
SSH 隧道是一种通过加密隧道传输未加密数据的有用方法。 它提供了三个选项,您可以根据自己的需要进行选择。