SSH 隧道(SSH Tunnel)指南
介绍
SSH 隧道(SSH Tunneling),又称为 SSH 端口转发(SSH Port Forwarding),是一种利用SSH协议为其他协议或网络链接加密的方法。通过SSH隧道,用户可以安全地传输未加密的网络流量,通过远程服务器转发到目标目的地,保证了数据传输的私密性和安全性。
SSH隧道主要有三种类型:
- 本地端口转发(Local Port Forwarding): 将本地端口的流量转发到SSH服务器,再由SSH服务器转发到目标服务器。
- 远程端口转发(Remote Port Forwarding): 将SSH服务器端口的流量转发到本地计算机,再由本地计算机转发到目标服务器。
- 动态端口转发(Dynamic Port Forwarding): 创建一个本地 SOCKS 代理服务器,应用程序通过配置使用这个SOCKS代理,而SSH客户端负责把流量通过SSH连接转发出去。
前提条件
- Linux 或 Windows 操作系统
- 安装了 OpenSSH 客户端的系统
- 对SSH远程服务器的访问权限
- SSH远程服务器的IP地址或域名,以及用户凭证(用户名、密码或SSH密钥)
SSH隧道的建立步骤
在Linux系统中使用SSH隧道
本地端口转发
ssh -L [本地IP:]本地端口:目标服务器IP:目标端口 用户名@SSH服务器 -N
例如,要将本地的4000端口流量转发到SSH服务器上,然后由它转发到内网的web服务器(内网IP为192.168.1.10)的80端口上:
ssh -L 4000:192.168.1.10:80 user@example.com -N
其中 -N
表示不执行远程命令,只是建立隧道。
远程端口转发
ssh -R [SSH服务器IP:]SSH服务器端口:本地IP:本地端口 用户名@SSH服务器 -N
例如,要将远程SSH服务器的5000端口流量转发到你的本地计算机的数据库端口3306上:
ssh -R 5000:localhost:3306 user@example.com -N
动态端口转发
ssh -D 本地SOCKS端口 用户名@SSH服务器 -N
例如,要创建一个监听在本地5500端口的SOCKS代理:
ssh -D 5500 user@example.com -N
在Windows系统中使用SSH隧道
在Windows中使用SSH隧道之前,确保有安装支持SSH的应用程序,如PuTTY或者使用Windows 10之后自带的OpenSSH客户端。
使用PuTTY建立SSH隧道
- 打开PuTTY。
- 在"Session"部分,填写SSH服务器的地址和端口(通常是22)。
- 在左侧菜单栏中选择"Connection" -> "SSH" -> "Tunnels"。
- 对于本地端口转发,在"Source port"中填写本地端口,"Destination"中填写目标服务器的地址和端口。之后选中"Local"选项并点击"Add"。
- 对于远程端口转发,与本地模式相似,但需选中"Remote"选项。
- 返回"Session"页面,输入Session名称并点击"Save"保存设置。
- 点击"Open"开始连接,并在提示时输入你的SSH用户凭证。
使用Windows 10的OpenSSH客户端
- 打开命令提示符或PowerShell。
- 使用与Linux系统建立SSH隧道的相同命令。例如,建立本地端口转发:
ssh -L 4000:192.168.1.10:80 user@example.com -N
- 输入您的SSH用户凭证以建立连接。