VSCode Remote-SSH 端口转发需点击状态栏 Remote: SSH →「Forward a Port…」输入远端端口(如3000),自动映射本地空闲端口;仅当前窗口有效,依赖远端服务监听127.0.0.1或0.0.0.0;持久化需配置~/.ssh/config的LocalForward。

VSCode Remote-SSH 连接后怎么加端口转发
直接在 VSCode 窗口右下角点击状态栏的 Remote: SSH 按钮,选「Forward a Port…」,输远端端口号(比如 3000),回车就自动映射到本地一个空闲端口(通常是同号),之后访问 http://localhost:3000 就是远端服务。
这个操作本质是让 VSCode 调用 SSH 的 -L 参数启动端口转发,不需要手动敲命令或改配置。但要注意:它只对当前窗口生效,关掉窗口或断开连接后转发就停了。
- 转发只在当前 VSCode 窗口生命周期内有效,不是全局后台服务
- 如果远端服务绑定了
127.0.0.1(常见于create-react-app或next dev默认行为),转发能通;但如果它只监听localhost且启用了 IPv6-only 或做了 host 检查,可能连不上 - 本地端口被占用时,VSCode 会自动找下一个可用端口,但不会提醒你——得自己去状态栏看实际映射的是哪个
远端服务起不来或连不上 localhost:x 怎么排查
最常见原因是远端服务没监听 127.0.0.1,而是监听了 0.0.0.0 或某个具体 IP,或者压根没起来。VSCode 的端口转发只能把流量从本地 127.0.0.1 转过去,不处理远端 bind 地址问题。
先确认服务真在跑:ps aux | grep 3000 或 lsof -i :3000;再看监听地址:ss -tuln | grep :3000,输出里如果第二列是 127.0.0.1:3000 或 *:3000 都行,但如果是 ::1:3000(IPv6 loopback)且本地没开 IPv6 支持,也可能失败。
-
npm run dev类命令默认可能只监听localhost,加--host 127.0.0.1或--host 0.0.0.0显式指定(注意后者有安全风险) - 某些框架(如 Vite)开发服务器默认不允许外部访问,需配
server.host: true或server.host: '127.0.0.1' - 防火墙一般不影响,因为转发走的是 SSH 隧道,不经过远端 iptables
想持久化转发或同时转多个端口怎么办
VSCode 自带的转发只是临时方案。如果要开机自启、多端口、或跨窗口共享,就得绕过 UI,直接配 SSH config 或用命令行。
编辑 ~/.ssh/config,在对应 Host 块里加一行:LocalForward 3000 127.0.0.1:3000,再加一条 LocalForward 8080 127.0.0.1:8080 就能一次转多个。下次用 ssh your-host 连,转发就自动生效。
- VSCode Remote-SSH 会读取
~/.ssh/config,所以改完不用重启 VSCode,新窗口就能用 - 如果远端服务监听的是
0.0.0.0:3000,LocalForward第二段必须写成127.0.0.1:3000,不能写0.0.0.0:3000(SSH 不允许) - Windows 用户注意:OpenSSH for Windows 的
LocalForward在较老版本(
为什么有时候明明转发了却提示 Connection Refused
不是 VSCode 或 SSH 的问题,大概率是远端服务根本没响应那个端口。Connection Refused 表示 TCP 握手阶段就被拒绝了,说明远端 127.0.0.1:x 上压根没进程在 listen。
别急着怀疑转发设置,先在远端跑:curl -v http://127.0.0.1:3000。如果这一步都失败,问题 100% 出在服务本身;如果成功,再查本地浏览器是否被代理/HTTPS 重定向干扰(比如访问 http://localhost:3000 被强制跳 https)。
- Chrome 有时会缓存 HSTS 策略,导致即使换端口也强制走 HTTPS,清掉
chrome://net-internals/#hsts里的记录 - VSCode 内置终端里执行的命令和图形界面启动的服务不在同一 session,比如用 GUI 启的
code .,再在内置终端跑npm start,服务可能受 shell 环境变量影响(如NODE_OPTIONS)而异常退出 - 转发端口和远端服务端口不一致时(比如远端是
4000,你转了3000),错误信息一模一样,容易误判——务必核对两个端口号是否匹配


















