Oamc

SSH 隧道与端口转发

本页目录

场景

不想装 VPN,只想临时把某个内网端口映射出来,或者把自己本地的服务给外网调试。

前置条件

  • 有一台能 SSH 的跳板机或公网服务器
  • 知道自己要访问的地址和端口

配置

本地转发(把远端的端口映射到本地)

# 访问跳板机能到的 10.0.0.5:3306,映射到本机 13306
ssh -N -L 13306:10.0.0.5:3306 user@jump.example.com

远程转发(把本地端口暴露到远端)

# 让别人访问公网服务器的 8080,实际转发到你本机 3000
ssh -N -R 8080:127.0.0.1:3000 user@public.example.com

远程转发要服务端 GatewayPorts yes 才能监听 0.0.0.0。

动态转发(SOCKS5 代理)

ssh -N -D 1080 user@jump.example.com
# 浏览器/客户端把代理设成 socks5://127.0.0.1:1080

保持连接

ssh -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes -N -L 13306:10.0.0.5:3306 user@jump
# 或者用 autossh
autossh -M 0 -N -L 13306:10.0.0.5:3306 user@jump

验证

ss -lntp | grep 13306
nc -zv 127.0.0.1 13306
curl -x socks5://127.0.0.1:1080 https://ifconfig.me

回滚

关掉 ssh 进程即可,隧道不改变任何配置。

坑

  • -N 不加会占一个交互 shell,脚本里记得加。
  • 远程转发默认只监听 127.0.0.1,要改 GatewayPorts。
  • 隧道断开后本地端口还显示监听(残留),要 ExitOnForwardFailure。
  • 只做转发不做认证,暴露出去等于开了一个后门。
  • 多个 -L 参数可以叠加,写在同一行。
  • 复制文件走隧道用 scp -o ProxyJump=jump 更省事。