SSH 隧道和端口转发完全指南:远程开发的瑞士军刀
Complete Guide to SSH Tunnels and Port Forwarding: The Swiss Army Knife for Remote Development
| Alex Chen | 2026-08-23T18:35:48
SSH 不只是用来登录服务器的。这篇文章介绍 SSH 隧道的三种模式,以及在远程开发中的实用技巧。
SSH is more than server login. Three tunnel modes and practical tricks for remote development.
## SSH 隧道是什么 SSH 隧道就是通过 SSH 连接把网络流量从一个端口转发到另一个端口。听起来简单,但用处非常大。 ## 三种模式 ### 本地转发(Local Forward) ```bash ssh -L 3307:db-server:3306 jump-host ``` 把本地的 3307 端口转发到 `db-server` 的 3306 端口,通过 `jump-host` 做跳板。最常见的场景:通过跳板机访问内网数据库。 这样本地用 `mysql -h 127.0.0.1 -P 3307` 就能连到内网数据库。 ### 远程转发(Reverse Forward) ```bash ssh -R 8080:localhost:3000 remote-server ``` 把远程服务器的 8080 端口转发到本地的 3000 端口。场景:把本地开发环境暴露给外网(类似 ngrok 但免费)。微信支付回调、Webhook 调试的救星。 ### 动态转发(SOCKS 代理) ```bash ssh -D 1080 remote-server ``` 在本地创建一个 SOCKS5 代理,所有通过这个代理的流量都走 SSH 隧道。 ## 实用技巧 ### 保持连接不断 ``` # ~/.ssh/config Host * ServerAliveInterval 60 ServerAliveCountMax 3 ``` ### 多跳隧道 ```bash ssh -J jump1,jump2 target-server ``` ### 后台运行 ```bash ssh -fNL 3307:db:3306 jump-host ``` ### 配置文件简化 ``` Host db-tunnel HostName jump-host LocalForward 3307 db-server:3306 LocalForward 6380 redis-server:6379 ``` 以后只需要 `ssh db-tunnel` 就能同时转发数据库和 Redis。 ## autossh:自动重连 ```bash autossh -M 0 -fNL 3307:db:3306 jump-host ``` `autossh` 会在连接断开时自动重连,适合长期运行的隧道。 SSH 隧道是远程开发的瑞士军刀,掌握了这三种模式,很多网络问题都能轻松解决。
Three SSH tunnel modes: Local Forward (access internal databases via jump host), Reverse Forward (expose local dev to internet), Dynamic Forward (SOCKS5 proxy). Tips: keep-alive config, multi-hop ProxyJump, autossh auto-reconnection.