最快入口是按Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac)输入“Remote-SSH: Forward a Port…”回车,仅在已连接的Remote-SSH窗口中生效,输入远程端口号后默认映射同号本地端口,冲突时自动递增但不提示,需查看状态栏Ports图标确认实际映射。

按 Ctrl+Shift+P 输入 “Forward a Port…” 是最快入口
VSCode 没有独立快捷键绑定端口转发,但命令面板是唯一可靠入口。Windows/Linux 按 Ctrl+Shift+P,macOS 按 Cmd+Shift+P,输入 Remote-SSH: Forward a Port… 回车即可——这个动作比点状态栏更直接,尤其适合反复操作。
注意:该命令只在已激活的 Remote-SSH 窗口中生效。如果当前是本地窗口或未连接远程主机,它不会出现、也不会报错,只会静默失败。
- 输入端口号(如
3000)后回车,VSCode 默认尝试建立localhost:3000 → remote:localhost:3000的隧道 - 若本地
3000被占用,它会自动递增到3001、3002……但不弹窗提示,必须看右下角状态栏的Ports图标悬停信息 - 想指定不同本地端口(比如把远程
3000映射到本地8080),不能在命令面板里输“8080→3000”,得改用 SSH 配置文件或手动命令
为什么点了命令却没反应?大概率是服务监听地址不对
VSCode 的转发只认 127.0.0.1 或通配符 *(等价于 0.0.0.0)。如果远程服务只监听 ::1(IPv6 loopback)或某个具体网卡 IP(如 192.168.1.100:3000),转发就会静默失败,浏览器打开 localhost:3000 报 Connection refused。
登录远程终端,用这两条命令快速验证:
-
ss -tlnp | grep :3000—— 看第二列输出是否含127.0.0.1:3000或*:3000 -
ps aux | grep 3000—— 确认进程确实在跑,不是被 kill 后残留的端口占位
常见框架默认行为要改:create-react-app 和 next dev 默认只绑 localhost,启动时加 --host 127.0.0.1;Vite 需在 vite.config.ts 里设 server.host: '127.0.0.1'。
想让远程机器访问你本地的服务?VSCode UI 不支持
VSCode Remote-SSH 的所有图形界面操作(包括命令面板和状态栏 Ports 视图)底层都调用的是 ssh -L(本地转发),**没有 -R(远程转发)的按钮、菜单或配置项**。搜 Remote Forward 或 Reverse Forward 什么也找不到。
如果你在 Remote 窗口里执行 Forward a Port… 并填了 8000,VSCode 实际运行的是:ssh -L 8000:localhost:8000 …,目标是连远程服务器自己的 localhost:8000——而那台机器根本没开这个服务,自然报错。
- 真正需要远程访问你本机服务(比如让服务器上的
curl调你本地localhost:8000),必须从你**本地终端**手动执行:ssh -R 8000:localhost:8000 user@remote-server - 这条命令的含义是:“把远程服务器的
localhost:8000绑定,收到请求后转发回我本地的localhost:8000” -
-R隧道随 SSH 连接存在,断开即失效;如需持久化,得用autossh或systemd管理
持久化多端口转发不能靠 UI,得改 ~/.ssh/config
VSCode 的图形化转发只对当前窗口有效,关掉就清空。要开机自启、一次转多个端口、或跨窗口复用,必须编辑 ~/.ssh/config。
在对应 Host 块里加多行 LocalForward,格式严格:
Host my-remote
HostName 192.168.1.100
User devuser
LocalForward 3000 127.0.0.1:3000
LocalForward 5432 127.0.0.1:5432
LocalForward 6379 127.0.0.1:6379
保存后,必须**完全断开再重连**(不是 reload window),VSCode 才会加载新规则。它不读全局配置里的 LocalForward,只认你当前连接所用 Host 块下的定义。
- 别写成
LocalForward=3000:127.0.0.1:3000(多了等号)——VSCode 直接忽略,无日志、不报错 - 不能用
*绑定本地地址(如LocalForward *:3000 …),VSCode 不支持;想让局域网其他设备访问,得用命令行ssh -L *:3000:…并确保远程 SSH 服务开了GatewayPorts yes -
remote.SSH.port是 VSCode 设置里控制 SSH 连接端口的,和LocalForward完全无关,写错位置会导致转发失效
0.0.0.0 却在转发里填了远程 IP 当目标,LocalForward 写在错的 Host 块里,或者以为 VSCode 会自动继承全局 SSH 配置——这些地方一错,按钮再快也没用。


















