VSCode端口转发本质是建立SSH隧道,将本地localhost:端口流量加密转发至远程指定地址和端口;快速添加方式为命令面板输入“Remote-SSH: Forward a Port…”并输入远程端口号,本地端口默认相同,冲突时自动递增但不提示,需查状态栏确认。

VSCode 的端口转发不是“把远程端口复制到本地”,而是建立一条 SSH 隧道,让发往 localhost:xxx 的 TCP 流量,经加密通道抵达远程服务器的指定地址和端口。它不依赖远程防火墙放行,也不暴露服务到公网——只要 SSH 连得上,就能通。
怎么快速加一个转发(命令面板最常用)
连上远程主机后,按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(Mac),输入 Remote-SSH: Forward a Port…,回车,直接输远程端口号(比如 3000)。VSCode 会自动监听本地同号端口(localhost:3000),并尝试连接远程的 localhost:3000。
- 本地端口留空时默认用远程端口号;填了别的数(如
9000),就变成localhost:9000 → remote:3000 - 如果本地
3000已被占用,VSCode 会悄悄换一个可用端口(比如3001),但不会弹窗提醒——得去右下角状态栏或Ports视图里看实际映射 - 转发只在当前 Remote-SSH 窗口生命周期内有效;关窗口或断开连接,隧道就断了
为什么 localhost:3000 打不开?重点查这三处
报 Connection refused 不代表 VSCode 转发失败,大概率是远程服务根本没在它该听的地方监听。
- 先确认服务真在跑:
ps aux | grep 3000或lsof -i :3000 - 再查监听地址:
ss -tlnp | grep :3000,输出第二列要是127.0.0.1:3000、*:3000或[::1]:3000(后者需本地 IPv6 支持) - 常见框架默认行为要改:create-react-app 和 Next.js 的
dev命令默认只绑localhost(即 IPv6::1),得加--host 127.0.0.1;Vite 需配server.host: '127.0.0.1'
想一次转多个端口,或者关掉 VSCode 也保持转发
VSCode 自带 UI 只管当前会话。要持久化或多端口,必须改 SSH 配置文件。
- 编辑
~/.ssh/config,在对应Host块里加多行:LocalForward 3000 127.0.0.1:3000、LocalForward 5432 127.0.0.1:5432 - 保存后,下次用
ssh your-host或新开 VSCode Remote 窗口,这些转发就自动生效(VSCode Remote-SSH 会读这个文件) - 注意:不能写成
LocalForward *:3000 …,VSCode 不支持*绑定;如需局域网其他设备访问,得配GatewayPorts yes并用命令行ssh -L *:3000:…
真正卡住人的从来不是“怎么点按钮”,而是远程服务监听地址和 SSH 配置作用域的错位——LocalForward 写在错的 Host 块里、服务绑了 0.0.0.0 却填了 remote-ip 当转发目标、或以为 VSCode 会自动读全局 SSH config 却忘了它只认自己管理的连接配置。这些细节不手动验证,光靠点击永远半通不通。


















