Remote-SSH卡在“Resolving host…”本质是SSH底层连接阻塞,需先用ssh -v验证DNS、TCP、认证;若ssh命令不通则插件必败;检查ssh路径、密钥权限、agent配置及远程vscode-server依赖。

Remote-SSH 扩展连接时卡在 “Resolving host…”
这是最常见现象,本质是 VSCode 无法通过 SSH 解析目标主机名或建立 TCP 连接。不是插件问题,而是底层 SSH 流程阻塞。
- 先在终端手动执行
ssh -v user@host,观察卡在哪一步:DNS 解析失败?TCP 连接超时?认证被拒? - 如果
ssh命令本身不通,Remote-SSH 必然失败——它只是调用本地ssh命令并包装 UI - 检查
~/.ssh/config中对应 Host 的HostName是否拼写正确,是否用了未定义的别名 - Windows 用户注意:WSL 内的 VSCode 默认走 WSL 的 SSH 配置,而非 Windows 的;若混用 OpenSSH for Windows 和 WSL 的
ssh,密钥路径、known_hosts 位置可能不一致
提示 “Could not establish connection to …” 且日志显示 “spawn ENOENT”
VSCode 尝试调用本地 ssh 可执行文件失败,系统找不到该命令。
-
macOS / Linux:运行
which ssh,确认输出非空;若为空,需安装 OpenSSH(如 macOS Monterey+ 已内置,旧版可brew install openssh) - Windows:默认启用 OpenSSH Client(设置 → 应用 → 可选功能),但部分精简版系统未安装;也可改用 Git Bash 的
ssh,需在 VSCode 设置中指定:remote.ssh.path设为"C:\\Program Files\\Git\\usr\\bin\\ssh.exe" - VSCode Remote-SSH 插件不会自动识别 PATH 外的 SSH 路径,必须显式配置
remote.ssh.path
连接成功但远程服务器上无法启动 VS Code Server
VSCode 会在远程首次连接时自动上传并运行一个轻量服务端(vscode-server),若失败,编辑器会停留在“Installing VS Code Server”界面或报错退出。
- 常见原因:远程用户家目录磁盘满、
/tmp不可写、SELinux/防火墙拦截了临时进程执行 - 手动验证:SSH 登录后执行
curl -sSL https://update.code.visualstudio.com/installer/archive\?build\=stable\&os\=linux-x64 | tar -xzf - -C /tmp && /tmp/vscode-server/bin/78a4c9144f060d87e90433d595a1d97adc357113/server.sh --help,看是否能解压并运行 - 若远程是 Alpine 或极简容器环境,缺少
tar、curl或 glibc 兼容库,需提前安装依赖或换用预编译二进制包 - 企业网络下,VSCode 默认从
update.code.visualstudio.com下载 server,若该域名被屏蔽,需配置代理或使用离线安装方式(见官方文档remote-ssh: offline install)
使用私钥登录失败,提示 “Permission denied (publickey)”
VSCode 默认复用系统 SSH 配置,但私钥权限、Agent 转发、passphrase 等细节极易出错。
- 私钥文件权限必须是
600(Linux/macOS):运行chmod 600 ~/.ssh/id_rsa,否则 OpenSSH 拒绝加载 - 若私钥有 passphrase,确保已用
ssh-add ~/.ssh/id_rsa加入 agent;Windows OpenSSH 默认不启用 agent,需手动启动Get-Service ssh-agent | Set-Service -StartupType Automatic; Start-Service ssh-agent - 检查
~/.ssh/config中是否误加了IdentitiesOnly yes却未配IdentityFile,导致忽略默认密钥 - 某些服务器禁用密码回退(
PubkeyAuthentication yes+PasswordAuthentication no),此时一旦密钥失败就彻底无路可走,务必留好备用登录通道
远程连接的真正难点不在配置界面,而在 SSH 协议栈每一层的隐式依赖:DNS、TCP、认证、shell 环境、临时空间、动态链接库……少一环都可能让进度条停在某个看似无关的阶段。










