VSCode端口转发失败主因是远程服务监听地址与转发目标不匹配;需确认服务监听127.0.0.1或*,检查ss -tlnp输出,框架如create-react-app须加--host 127.0.0.1,本地端口冲突时VSCode静默递增需查状态栏,持久化多端口须在~/.ssh/config中正确配置LocalForward。

能直接用,但默认配置大概率连不上——核心卡点从来不是 VSCode 操作,而是远程服务监听地址和转发目标不匹配。
Remote-SSH 的 Forward a Port 为什么点完还是 Connection refused
VSCode 点击 Remote-SSH: Forward a Port… 后显示绿色图标,不代表你真能访问 localhost:3000。它只说明 SSH 隧道建成了,流量已从本地发出去;但远程服务可能根本没在它该听的地方等。
- 先查服务是否运行:
ps aux | grep :3000或lsof -i :3000 - 再查监听地址:
ss -tlnp | grep :3000,关键看第二列输出 —— 必须是127.0.0.1:3000、*:3000或[::1]:3000(后者需本地 IPv6 支持) - 常见框架默认只绑
localhost(即 IPv6::1),比如create-react-app start、next dev、vite dev,必须显式加--host 127.0.0.1或配server.host: '127.0.0.1' - 如果服务监听的是
0.0.0.0:3000,转发目标写成localhost:3000也能通;但如果写成192.168.1.100:3000却只监听了127.0.0.1,就一定失败
本地端口被占时 VSCode 怎么偷偷换号却不告诉你
输入远程端口 3000 后,VSCode 默认尝试监听本地 3000。一旦被占,它会自动递增找下一个可用端口(如 3001、3002),但完全不弹窗、不提示、不报错。
- 实际映射只能去右下角状态栏点击
Forwarded Ports查看,悬停条目能看到完整路径,例如localhost:3001 → localhost:3000 - 想固定本地端口:在命令面板输入
Remote-SSH: Forward a Port…后,别直接回车,先输本地端口号(如9000),再回车,就会变成localhost:9000 → localhost:3000 - 这个行为仅对当前 Remote-SSH 窗口有效;关窗口或断连,隧道立刻断开,不会后台常驻
怎样让多个端口(如 3000 + 5432)每次连上就自动转发
VSCode UI 不支持“开机自启”或“多端口批量添加”,持久化必须改 SSH 配置文件。
- 编辑
~/.ssh/config,在对应Host块里加多行LocalForward,例如:
Host my-server HostName 192.168.1.100 User dev LocalForward 3000 localhost:3000 LocalForward 5432 localhost:5432
-
注意语法:不能写
LocalForward=3000:localhost:3000(等号会被忽略),也不能写LocalForward *:3000(VSCode 不支持*绑定) - 改完保存后,必须断开当前 Remote 连接,再重新
Connect to Host才生效 - VSCode Remote-SSH 扩展会读这个文件,不需要重启 VSCode 主进程
转发成功但浏览器打不开?重点盯这三处
不是 VSCode 问题,也不是网络问题,而是三个具体位置容易错位:
-
LocalForward写在了错误的Host块里(比如写到了全局Host *下,但你连的是my-server) - 远程服务监听的是
127.0.0.1:3000,但你在转发时填的目标地址是192.168.1.100:3000(应该统一用localhost) - 以为 VSCode 会自动读
/etc/ssh/sshd_config或settings.json—— 它只认~/.ssh/config里的LocalForward,且只在 Remote-SSH 连接时生效
真正难调的从来不是按钮在哪,而是监听地址、转发目标、SSH 配置作用域这三者的对齐关系——少一个对齐,localhost:3000 就永远是 Connection refused。


















