824 字
4 分钟
SSH反向隧道-原理-用法-实战
介绍下ssh反向隧道:ssh -R…
SSH 反向隧道(reverse tunnel)本质上是把远端机器的端口映射回本地机器,常用于“内网穿透”。
你提到的 ssh -R,我们直接从原理 + 用法 + 实战来讲清楚。
一、核心概念(一句话理解)
ssh -R = 让远程服务器帮你开一个端口,这个端口的流量会被转发回你本地
二、基本语法
ssh -R [远程端口]:[本地地址]:[本地端口] user@远程服务器👉 含义:
| 部分 | 说明 |
|---|---|
| 远程端口 | 在远程服务器上监听的端口 |
| 本地地址 | 本地服务地址(通常 127.0.0.1) |
| 本地端口 | 本地服务端口 |
| user@远程 | SSH服务器 |
三、最经典例子(内网穿透)
场景
你有一台:
- 本地电脑(在 NAT / 内网里)
- 一台公网 VPS
你本地跑了一个服务:
localhost:8080你想让外网访问它。
命令
ssh -R 9000:localhost:8080 user@vps效果
访问:
vps:9000👉 实际访问的是:
你本地的 localhost:8080四、数据流方向(重点)
很多人会理解错 👇
客户端(你) ----SSH----> VPS但端口转发是反的:
外部用户 → VPS:9000 → SSH隧道 → 你本地:8080👉 所以叫“反向隧道”
五、和 ssh -L 的区别
| 类型 | 命令 | 方向 |
|---|---|---|
| 本地转发 | ssh -L | 本地 → 远程 |
| 反向转发 | ssh -R | 远程 → 本地 |
六、常见高级用法
1️⃣ 绑定 0.0.0.0(让别人也能访问)
默认情况下:
ssh -R 9000:localhost:8080 user@vps👉 只允许 VPS 本机访问
想让公网访问:
ssh -R 0.0.0.0:9000:localhost:8080 user@vps⚠️ 还需要 VPS 开启:
GatewayPorts yes在:
/etc/ssh/sshd_config2️⃣ 后台运行
ssh -fN -R 9000:localhost:8080 user@vps| 参数 | 含义 |
|---|---|
| -f | 后台运行 |
| -N | 不执行远程命令 |
3️⃣ 自动重连(生产必备)
用:
autossh
autossh -M 0 -fN -R 9000:localhost:8080 user@vps4️⃣ 多端口映射
ssh -R 9000:localhost:8080 -R 9001:localhost:22 user@vps七、典型应用场景
✔ 内网服务暴露(最常见)
- 家里 NAS
- 本地 Web 服务
- 开发调试接口
✔ 远程 SSH 回连
ssh -R 2222:localhost:22 user@vps然后你可以在 VPS 上:
ssh localhost -p 2222👉 反向连回你的机器
✔ 绕 NAT / 防火墙
- 无公网 IP
- 被运营商限制入站
✔ 类似 frp / ngrok 的轻量替代
SSH 就能搞定,不需要额外服务
八、一个完整实战流程
本地执行:
ssh -fN -R 0.0.0.0:9000:localhost:8080 user@vpsVPS 配置:
vim /etc/ssh/sshd_config确保:
GatewayPorts yes重启:
systemctl restart sshd外网访问:
http://vps_ip:9000九、安全注意事项(很重要)
⚠️ 1. 暴露的是你本地服务
如果你本地是:
localhost:8080👉 等于公网直接访问
⚠️ 2. 建议加限制
- 防火墙(iptables / ufw)
- 绑定 IP(不要用 0.0.0.0)
- 加认证(HTTP basic / token)
⚠️ 3. SSH 权限
可以限制:
AllowTcpForwarding yes十、你这个方向可以再深入的点
既然你之前在折腾 VPS / xray / 网络,我建议你可以继续玩这些:
- SSH 隧道 + SOCKS 代理(
-D) - 反向隧道 + WebSocket
- 用 SSH 做一个“简易 frp”
- 结合 systemd 做常驻服务
如果你想进阶,我可以讲这些(更硬核)
比如:
ssh -R背后 TCP forwarding 机制(channel / multiplex)- 和 frp / wireguard 的本质差异
- 如何自己写一个反向隧道(用 Go / Python)
- 在运营商封锁环境下如何伪装
你可以直接说:“讲底层”或者“讲实战架构”。
ChatGPT can make mistakes. Check important info.
SSH反向隧道-原理-用法-实战
http://cypherx.top/posts/cs/ssh反向隧道-原理-用法-实战/