内网IP无法直连VSCode Remote-SSH因网络层不通,需用跳板机(ProxyJump)或反向隧道(ssh -R)中转;配置须严格控制SSH密钥权限与authorized_keys完整性。

为什么直接填内网IP连不上
VSCode 的 Remote-SSH 扩展默认走标准 SSH 协议,要求客户端能直连目标服务器的 SSH 端口(通常是 22)。如果测试服务器在纯内网、没有公网 IP、也没做端口映射或 NAT 转发,那 VSCode 就根本发不出 TCP 连接请求——不是配置错,是网络层就通不过。
必须用中转机器做跳板(Jump Host)
最稳且无需额外服务端软件的方式,是找一台有公网 IP 的 Linux 机器(比如云服务器、家里树莓派、公司跳板机)作为中转。你的本地 VSCode 先连它,再由它连内网服务器。关键靠 SSH 的 ProxyJump 或 ProxyCommand 实现。
实操步骤:
- 确保中转机(
jump.example.com)能 SSH 登录内网服务器(比如192.168.10.5),即:在中转机上执行ssh user@192.168.10.5要能成功 - 在本地
~/.ssh/config中添加两段配置:
Host jump HostName jump.example.com User your_user_on_jump Host test-server HostName 192.168.10.5 User your_user_on_internal ProxyJump jump
保存后,在 VSCode 的 Remote-SSH 连接面板里选 test-server,它会自动走跳转链路。不需要改 VSCode 设置,也不需要手动开两个终端。
如果中转机不能直接访问内网服务器怎么办
常见于中转机和内网服务器不在同一局域网,或中转机本身也受限(比如只开放了 Web 端口)。这时得换方案:在内网服务器上主动反向建立隧道到中转机。
在内网服务器上执行:
ssh -R 2222:localhost:22 user@jump.example.com
这会让中转机的 2222 端口转发到内网服务器的 22 端口。然后在本地 VSCode 的 SSH 配置里写:
Host test-via-reverse HostName jump.example.com Port 2222 User your_user_on_internal
注意:Port 2222 是连中转机的端口,User 是内网服务器上的用户名(因为隧道把登录认证透传过去了)。这个连接依赖隧道常驻,建议用 autossh 或 systemd service 管理反向隧道进程。
别踩这些坑
Remote-SSH 对密钥权限很敏感,尤其是跳转场景下容易因权限问题静默失败:
-
~/.ssh/config文件权限必须是600(chmod 600 ~/.ssh/config),否则 SSH 客户端会忽略它 - 跳转链路上每台机器的
~/.ssh/authorized_keys都要包含你本地的公钥;缺任何一环都会卡在 password 提示或直接报Permission denied (publickey) - 如果内网服务器禁用了密码登录(
PasswordAuthentication no),但你的密钥没配对成功,VSCode 就会反复弹窗又失败,看不出具体哪步断了——建议先在终端手动跑一遍ssh test-server看真实错误
反向隧道方式最大的隐性成本是:一旦中转机重启或网络抖动,隧道就断,VSCode 连接会直接掉,且不会自动重连。这点比正向跳板更难监控。


















