ssh隧道或ssh端口转发是一种在客户端和服务器之间创建加密SSH连接的方法,通过ssh隧道连接可以中继服务端口。

ssh转发对于传输未使用加密协议的服务,例如VNC或FTP。访问受地理限制的内容或绕过中间防火墙的网络数据很有用。

基本上,您可以转发任何TCP端口并通过安全的ssh连接建立隧道。

你可以使用ssh创建三种类型的ssh端口转发。分别是

本地端口转发-连接从客户端主机转发到SSH服务器主机,然后转发到目标主机端口。

远程端口转发-将端口从服务器主机转发到客户端主机,然后转发到目标主机端口。

动态端口转发-创建SOCKS代理服务器,该服务器允许跨多个端口进行通信。

在教程中,我们将讨论如何配置本地,远程和动态端口转发的SSH隧道。我们分别举例了mysql和vnc以及自己编写应用的端口转发示例。请根据项目的实际应用。

本地端口转发

本地端口转发使您可以将本地计算机上的端口数据转发到远程计算机上的端口。

通常使用SSH本地端口转发数据是为加密的协议创建一个私有虚拟通道类似于VPN并加密数据。

这里的本地计算机上指的ssh客户端所在的计算机,远程计算机指的是ssh服务器所在的计算机。

在这种类型的转发中,SSH客户端将会监听指定的端口,并将与该端口的任何连接通过ssh隧道传输到远程计算机指定的端口。

本地端口转发通常用于连接到内部网络,例如数据库或VNC服务器上的远程服务。在Linux,macOS和其他Unix系统中,创建本地端口转发可以使用ssh的-L选项。

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

[LOCAL_IP:]LOCAL_PORT是本地计算机的IP和端口号。如果监听的是回环地址127.0.01可以省略LOCAL_IP参数。

DESTINATION:DESTINATION_PORT是目标计算机的IP和端口。[USER@]SERVER_IP是远程SSH用户和服务器IP地址。如果你使用的是主机名必须可以解析到服务器的地址。

可以将大于1024的任何端口号用作LOCAL_PORT。小于1024的端口号是特权端口,并且只能由root用户使用。

如果您的SSH服务器没有使用默认端口22,请使用-p [PORT_NUMBER]选项指定ssh服务的端口。

以下是一个本地局域网的示例,你可以使用在VPS提供商中启用Linux服务器。测试本地端口的转发。ssh本地端口转发也可以互联网服务器工作。

假设您有一个计算机192.168.171.130正在运行vnc服務,可从本地计算连接到远程计算机192.168.171.130。但你想使用SSH加密vnc服务的数据。

ssh -L 127.0.0.1:5901:192.168.171.130:5901 -N -f myfreax@192.168.171.130命令将会创建并加密VNC服务的数据。

运行命令后,系统会提示您输入远程SSH用户密码。输入后,您将与远程服务器建立SSH隧道,如果你设置基于SSH密钥的身份验证,不输入密码也可连接到服务器。

-f选项指示ssh在后台运行,-N指示ssh不要登录远程服务器。

如果你没有添加-f-N。在输入密码并回车后,你会发现也将同时登录到远程服务器。这是因为SSH为了避免退出SSH会话,保持客户端与服务器端的连接。

与此同时SSH在你本地计算机监听端口5901 ,接收来自5901 端口的所有数据并转发的5901 服务,然后再由SSH服务转发到VNC服务器监听的5901 端口。

现在,你使用本地计算机的vnc客户端连接到VNC服务器,你在vnc客户端的所有数据都将会经过ssh隧道加密传输。

远程端口转发

远程端口转发与本地端口转发相反。它允许您将本地计算机上指定端口的数据转发到远程计算机上的端口。

在这种类型的转发中,远程计算机SSH服务器监听指定的端口,并将与该端口的连接通过隧道传输到本地计算机的指定端口。

在Linux,macOS和其他Unix系统中,要创建远程端口转发,请将-R选项传递给ssh客户端。

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

[REMOTE:]REMOTE_PORT远程计算机的IP和端口号。如果省略远程的IP地址表示远程计算机的SSH将在所有接口上监听指定端口,相当于0.0.0.0,有的计算机会有多个网卡。

DESTINATION:DESTINATION_PORT目标计算机的IP地址和端口,这通常是你本地计算机的ip地址与端口,一般都是127.0.0.1

[USER@]SERVER_IP远程SSH用户和服务器IP地址,这相当于你使用ssh登录远程服务器的ssh命令。

假设您正在在本地计算机上开发Web应用程序,并且想向非开发的人员显示预览你网页。

你有一台远程可访问vps服务器IP是192.168.171.130,你来不及在vps服务器上部署Web应用程序。你的Web应用程序在本地计算机监听3000端口。

此时你就可以使用SSH的远程端口转发。暴露你本地计算机的端口到远程服务器的端口上,并指示ssh服务在远程计算机监听端口8080

ssh -R 8080:127.0.0.1:3000 -N -f myfreax@remote.host

当非开发的人员在浏览器输入地址http://192.168.171.130:8080访问时,SSH将会接收的到的浏览器发出的数据,并转发到你的本地计算机300端口。

如果您在设置远程端口转发时遇到问题,请确保在远程SSH服务器配置中将GatewayPorts设置为yes

结论

我们向您展示了如何设置SSH隧道并通过安全的SSH连接转发流量。为了易于使用,您可以在SSH配置文件中定义SSH隧道,或创建SSH隧道的Bash别名。如果您遇到问题或有反馈,请在下面发表评论。