Remote-SSH连不上内网穿透服务器的根本原因是未通过~/.ssh/config显式配置Host别名及端口,VSCode不识别user@ip:port格式,必须用Quick Pick选择别名;同时需确保frp映射、云服务器sshd监听、安全组放行2222端口及密钥权限正确。

Remote-SSH 插件连不上内网穿透后的服务器?不是插件问题,而是你填的地址根本没打到目标机器上。
VSCode 用 ssh 命令能连,但 Remote-SSH 连不上
常见错误现象:Could not establish connection to ...,日志里出现 kex_exchange_identification 或直接卡在“Connecting...”。
根本原因:VSCode 的 Remote-SSH 不会自动读取你在终端里敲的 ssh -p 2222 user@ip,它只认 ~/.ssh/config 里定义的 Host 别名,且必须通过 Quick Pick(Ctrl+Shift+P → “Remote-SSH: Connect to Host…”)选择,不能手输 user@ip。
- 检查
~/.ssh/config是否存在且格式正确,例如:
Host my-dev
HostName 123.45.67.89
Port 2222
User ubuntu
IdentityFile ~/.ssh/id_rsa-
IdentityFile必须写绝对路径,~在 VSCode 中可能不展开 - 私钥权限必须是
600:chmod 600 ~/.ssh/id_rsa - 别在连接面板里直接输
ubuntu@123.45.67.89—— 这样Port和IdentityFile全部被忽略
Remote-SSH 报 Permission denied (publickey),但命令行 ssh -p 2222 能通
说明认证链断在 VSCode 启动的 SSH 会话里,不是服务端没配好,而是客户端没传对凭据。
- 确认
~/.ssh/config中该 Host 下明确写了IdentityFile,且路径可访问 - 检查云服务器上
~/.ssh/authorized_keys文件权限是否为600,目录~/.ssh是否为700 - 如果改过 SSH 端口(比如从 22 改成 2222),确保
/etc/ssh/sshd_config中PubkeyAuthentication yes仍启用,并执行sudo systemctl restart sshd(reload不生效) - 某些穿透服务(如 frp)默认禁用
AllowAgentForwarding,若需代理转发,得在服务端显式打开
穿透端口不通,telnet your-ip 2222 失败
这不是 VSCode 的问题,是穿透链路没打通。VSCode 连接失败只是表象,真正卡点在中间层。
- 先在云服务器上执行:
telnet 127.0.0.1 2222—— 不通说明 frp server 没监听,或 frps.ini 里没放开allow_ports = 2222 - 再查云服务器防火墙:
sudo ufw status或sudo firewall-cmd --list-ports,确认 2222 已放行 - 阿里云/腾讯云等平台的安全组规则必须手动添加入方向 TCP:2222,仅开放 22 不够
- 本地 frpc.ini 的
remote_port和云服务器 frps.ini 的bind_port要匹配,且local_port = 22(指向本机 SSH)
局域网直连成功,但一加穿透就失败
本质是网络路径变了,原来走的是内网路由,现在全靠公网中转,任何一环权限收紧都会导致失败。
- 局域网直连时,
ssh ubuntu@192.168.1.100可以省略端口;穿透后必须显式指定端口,且只能通过 config 别名触发 - 很多用户以为“只要 frp 跑起来就能连”,忽略了 SSH 服务本身是否监听非 22 端口 —— 实际上它只监听 22,frp 才负责把 2222 映射过去
- VSCode 的
Remote-SSH日志藏得深:按 Ctrl+Shift+P → “Remote-SSH: Show Log”,看最后一段真实错误,比弹窗提示准得多
最易被忽略的一点:VSCode 启动的 SSH 连接默认不加载 shell profile,所以如果你在 .bashrc 里改了 PATH 或用了自定义 ssh-agent,它很可能找不到 key 或连不上代理。调试时优先用纯配置驱动,绕过环境变量依赖。


















