VSCode Remote-SSH连接失败主因是SSH配置错误、远程SSH服务未启用或被防火墙拦截、VS Code扩展权限/路径异常;需检查sshd状态、~/.ssh/config配置、remote.ssh.path设置及远程vscode-server环境。

连不上不是插件问题,而是 VSCode 默认只认 22 端口,你改了端口却没在配置里显式声明,它根本不会自动识别穿透映射端口或自定义 SSH 端口。
Remote-SSH 必须通过 ~/.ssh/config 指定非 22 端口
VSCode 的 Remote-SSH 插件不解析你在连接框里输的 user@host:2222 这种格式——它会忽略冒号后的端口,只当你是想连 22。唯一可靠的方式是走 SSH 配置文件。
- 编辑
~/.ssh/config,写一段合法 Host 配置(别名不能含下划线或大写字母):Host myserver HostName 192.168.1.100 User ubuntu Port 2222 IdentityFile ~/.ssh/id_rsa
- 保存后,在 VSCode 命令面板(
Ctrl+Shift+P)运行Remote-SSH: Connect to Host...,选myserver——不是输 IP,是选这个别名 - 如果用的是内网穿透(如 frp),确认云服务器上能
telnet 127.0.0.1 2222通;不通说明 frp client 没连上 server,或云平台安全组没放行2222
Permission denied (publickey) 的真实原因和修复点
报这个错,不代表密码错了,大概率是私钥没被加载、路径不对、或服务端拒绝了该密钥。尤其在非 22 端口下,OpenSSH 对权限更敏感。
-
IdentityFile必须写绝对路径,比如/home/user/.ssh/id_rsa,不能用~—— VSCode 的 SSH 插件有时不展开波浪号 - 本地私钥权限必须是
600:chmod 600 ~/.ssh/id_rsa;Windows 上还要确认是 PEM 格式,.ppk不支持 - 公钥内容必须已追加进服务器的
~/.ssh/authorized_keys(不是覆盖!),且该文件权限为600,目录~/.ssh为700 - 检查服务器
/etc/ssh/sshd_config是否启用:PubkeyAuthentication yes、Port 2222、AllowAgentForwarding yes;改完必须sudo systemctl restart sshd,reload不生效
内网穿透场景下 kex_exchange_identification 错误怎么快速定位
这不是认证失败,而是 TCP 连接刚建好就被远端立即切断。本质是“还没走到验证那步,连接就没了”。
- 先在服务器本地执行:
ss -tuln | grep ':2222',看有没有LISTEN——没有说明sshd根本没监听这个端口 - 检查 frp server 配置(如
frps.ini)是否在allow_ports里放开2222 - 云服务器(阿里云/AWS)的安全组规则必须明确允许入方向
2222/TCP,不能只开22 - Linux 服务器防火墙(
ufw或firewalld)默认可能拦非标准端口,临时关掉测试:sudo ufw disable
远程 vscode-server 启动失败的隐藏条件
SSH 连成功 ≠ 远程开发就绪。VSCode 会在服务器上自动下载并启动 vscode-server,但它依赖几个容易被最小化系统砍掉的基础组件。
- 确保服务器有
curl和tar:which curl && tar --version;Alpine 或debian-slim镜像常缺glibc,导致解压后无法执行 - 检查磁盘空间:
df -h ~ /tmp;No space left on device会静默失败 - 某些企业环境挂载
/home时用了noexec,导致~/.vscode-server下的二进制无法运行;需确认挂载参数:mount | grep home - 如果连接后卡在
Opening remote…超过 30 秒,大概率是~/.bashrc里有阻塞操作(如git status、API 请求),注释掉再试
真正卡住的地方往往不在连接动作本身,而在 SSH 配置的路径展开、私钥权限的跨平台差异、或 vscode-server 对基础工具链的隐式依赖——这些细节一旦漏掉,就会陷入“命令行能连,VSCode 死活不行”的循环。


















