SSH隧道代理
本地端口转发
用途:将本地端口的流量转发到远程服务器的目标端口。 场景:访问被封锁的远程服务(如内网网站)。
命令格式:
ssh -L [本地IP:]本地端口:目标服务主机:目标服务端口 远程服务器用户@远程服务器IP
示例:
假设远程服务器 192.168.1.100
可以访问内网网站 10.0.0.1:80
,但你的本地机器无法直接访问。通过以下命令将本地 8080
端口的流量转发到内网网站:
ssh -L 8080:10.0.0.1:80 user@192.168.1.100
之后,在本地浏览器访问 http://localhost:8080
即可查看内网网站内容。
远程端口转发
用途:将远程服务器的端口流量转发到本地主机的目标端口。 场景:从外网访问内网中的本地服务(如在家访问公司内网的开发服务器)。
命令格式:
ssh -R [远程IP:]远程端口:本地主机:本地端口 远程服务器用户@远程服务器IP
示例:
假设你在内网的本地机器 10.0.0.2
上运行了一个 Web 服务(端口 8000
),需要通过公网服务器 45.67.89.100
访问。在内网机器上执行:
ssh -R 8080:localhost:8000 user@45.67.89.100
之后,在公网通过 http://45.67.89.100:8080
即可访问内网服务。
动态端口转发
用途:创建一个 SOCKS 代理服务器,将所有流量通过 SSH 隧道转发。 场景:全局代理访问被封锁的网络资源(如绕过防火墙限制)。
命令格式:
ssh -D [本地IP:]本地端口 远程服务器用户@远程服务器IP
示例:
创建一个本地 SOCKS5 代理(端口 1080
):
ssh -D 1080 user@45.67.89.100
配置浏览器或应用程序使用 SOCKS5 代理(地址:localhost
,端口:1080
),所有流量将通过 SSH 隧道加密传输。
常用选项
-N
:不执行远程命令,仅用于转发端口。-f
:后台运行 SSH 进程。-C
:启用压缩,减少数据传输量。-v
:显示详细的连接信息(调试用)。