ssh隧道和代理创建
SSH 隧道转发与代理命令
本地端口转发 -L
访问目标服务器的内网服务
1 | ssh -N -L 本地端口:目标主机:目标端口 用户名@SSH服务器 |
示例:把内网 192.168.1.100:8082 映射到本机 127.0.0.1:8082
1 | ssh -N -L 8082:192.168.1.100:8082 user@SSH服务器地址 |
本地访问:
1 | curl -v http://127.0.0.1:8082/ |
浏览器访问:
1 | http://127.0.0.1:8082/ |
注意:
目标主机是从 SSH 服务器视角能访问到的地址。- 本地访问统一用
127.0.0.1,避免localhost解析到 IPv6::1。 - 如果目标服务校验
Host,可测试:
1 | curl -v -H "Host: 192.168.1.100:8082" http://127.0.0.1:8082/ |
远程端口转发 -R
让目标服务器访问本地服务
1 | ssh -N -R 远程端口:本地主机:本地端口 用户名@SSH服务器 |
示例:把本机 3000 端口映射到 SSH 服务器的 8080 端口
1 | ssh -N -R 8080:localhost:3000 user@SSH服务器地址 |
之后在 SSH 服务器上访问:
1 | http://127.0.0.1:8080/ |
用途:内网穿透、让远端访问本地开发环境。
是否允许远程访问还取决于 SSH 服务端 GatewayPorts 配置。
代理 -D
开启 SOCKS5 代理,并用它访问内网服务
1 | ssh -N -D 1080 用户名@SSH服务器 |
示例:
1 | ssh -N -D 1080 user@SSH服务器地址 |
该命令在本机 127.0.0.1:1080 开启一个 SOCKS5 代理。之后支持 SOCKS5 的程序都可以通过该代理访问 SSH 服务器能访问的网络。
curl 走 SOCKS5 代理
1 | curl --socks5-hostname 127.0.0.1:1080 http://目标内网IP:8082/ |
推荐 --socks5-hostname,让代理端解析域名。目标使用 IP 时也可:
1 | curl --socks5 127.0.0.1:1080 http://目标内网IP:8082/ |
浏览器走 SOCKS5 代理
代理设置中只填:
1 | SOCKS 主机:127.0.0.1 |
HTTP 代理、SSL 代理、FTP 代理全部留空。
-D 提供的是 SOCKS 代理,不是 HTTP 代理。把 SOCKS 填到 HTTP 代理栏会导致 ERR_CONNECTION_RESET。
命令行临时代理环境变量
Linux/macOS:
1 | export ALL_PROXY=socks5h://127.0.0.1:1080 |
Windows CMD:
1 | set ALL_PROXY=socks5h://127.0.0.1:1080 |
PowerShell:
1 | $env:ALL_PROXY="socks5h://127.0.0.1:1080" |
注意:不是所有程序都识别 ALL_PROXY,浏览器单独配置 SOCKS5 最稳。
常用参数速查
| 参数 | 作用 |
|---|---|
-N |
只转发,不执行远程命令,不开 shell |
-f |
后台运行,Linux/macOS 常用;Windows 可新开窗口 |
-C |
压缩传输 |
-v |
调试输出,排查隧道失败必用 |
-T |
不分配终端 |
-4 / -6 |
强制 IPv4 / IPv6 |
-o ExitOnForwardFailure=yes |
转发失败就退出,避免“假连上” |
-o ServerAliveInterval=30 |
每 30 秒发心跳 |
-o ServerAliveCountMax=3 |
心跳失败 3 次后断开 |
-g |
允许其他主机连接本地转发端口,慎用 |
推荐稳定写法:
1 | ssh -N -C \ |
Windows 不使用 -f 时,新开 CMD 窗口运行即可;CMD 后台新窗口可用:
1 | start "" ssh -N -D 1080 user@SSH服务器地址 |
写入 ~/.ssh/config
Windows 路径通常为:
1 | C:\Users\<用户名>\.ssh\config |
示例:
1 | Host jump |
以后启动:
1 | ssh -N jump |
只保留本地转发时,注释掉 DynamicForward;只保留 SOCKS 代理时,注释掉 LocalForward。
最常用三条
1 | # 1. 本地转发:访问内网服务 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HAHA!

