SSH 端口转发实战:三分钟打通内网服务
SSH 端口转发实战:三分钟打通内网服务
本地在云服务器上跑着一个只能本机访问的管理面板,家里的笔记本想直接访问它,又不想把端口暴露到公网,这时候 SSH 端口转发就是最趁手的工具。不用装任何额外软件,一条命令搞定。
三种转发,一张图记清
SSH 的端口转发分三种,按流量方向记忆:
- 本地转发(-L):把远端服务"拉"到本地来。适合"我要访问内网里的东西"。
- 远程转发(-R):把本地服务"推"到远端去。适合"让外网访问我本地的服务"。
- 动态转发(-D):本地起一个 SOCKS5 代理,流量按需走。适合"临时翻一类的需求"、“批量访问多个内网地址”。
实战一:本地转发访问内网面板
场景:ECS 上有一个 Prometheus 面板监听在 127.0.0.1:9090,安全组没放行 9090。
ssh -N -L 9090:127.0.0.1:9090 user@your-ecs-ip
这条命令的含义:把本机的 9090 端口转发到 ECS 上的 127.0.0.1:9090。建好隧道后,浏览器打开 http://localhost:9090 就能看到面板了,流量全程走 SSH 加密通道。
常用参数说明:
-N:不执行远程命令,只建隧道;-f:转入后台运行(配合-N使用);-o ServerAliveInterval=60:防止长时间空闲被网关掐断。
一个更健壮的写法:
ssh -fN -o ServerAliveInterval=60 -o ServerAliveCountMax=3 \
-L 9090:127.0.0.1:9090 user@your-ecs-ip
实战二:远程转发让外网访问本地服务
场景:本地开发了一个 Webhook 接收服务(localhost:8080),想让第三方平台回调它,但本地没有公网 IP。
ssh -N -R 8080:127.0.0.1:8080 user@your-ecs-ip
建好后,第三方访问 http://your-ecs-ip:8080 就等于访问了你本地的 8080。注意两点:远端 sshd 必须开 GatewayPorts yes(否则只能从远端本机访问该端口);这个端口会占用公网入口,用完记得关掉。
实战三:动态转发当临时代理
场景:内网有一批地址(数据库、内部 API)要临时调试,一个个建转发太麻烦。
ssh -N -D 1080 user@your-ecs-ip
本地就多了一个 SOCKS5 代理 127.0.0.1:1080。浏览器装个代理切换插件(比如 SwitchyOmega),配一条"内网网段走 SOCKS5"的规则,就能直接访问内网资源了。调试完关掉隧道即可,不留痕迹。
排错清单
- 连接建上了但端口不通:先
ss -tlnp | grep 端口号确认本地监听是否真的起来了。 - 隧道用着用着断了:加上
ServerAliveInterval,或者用 autossh 做自动重连:autossh -M 0 -fN -o ServerAliveInterval=30 -L 9090:127.0.0.1:9090 user@your-ecs-ip - 提示 bind: Address already in use:本地端口被占用了,换一个本地端口,比如
-L 19090:127.0.0.1:9090。
一句话总结
-L 拉进来,-R 推出去,-D 做代理。记住这三个方向,内网穿透的八成场景一条命令就能解决,剩下的两成再考虑 frp 之类的专用工具也不迟。
- 点赞
- 收藏
- 关注作者
评论(0)