VSCode Remote-SSH 连接失败主因是私钥未加载,常见于 SSH 配置语法错误、私钥权限非600、或 VSCode 未使用系统默认 ssh;需检查 ~/.ssh/config 格式、远程依赖(bash/tar/ps/$HOME可写)及 Windows 多 OpenSSH 实例冲突。
VSCode 本身不管理 SSH 密钥,它完全依赖本地 OpenSSH 客户端的配置和文件权限。只要在终端里能免密,Remote-SSH 就大概率能;反之,VSCode 能连上而终端不能,说明 VSCode 没走你预期的配置路径。
为什么 VSCode 连接时还弹密码框?
这不是 VSCode 的 bug,而是它没加载到你的私钥——常见原因有三个:
语法错误(比如缩进不规范、
块没闭合、字段名拼错成
)
私钥文件权限不是
(Windows 上用 OpenSSH for Windows 也一样,
必须执行)
VSCode 没用系统默认
,而是读了别的路径:检查设置里
是否被手动填了绝对路径;留空才走系统默认
验证方式:在终端运行
(把
换成你 config 里的
名),看输出里有没有
和
。
怎么写才被 Remote-SSH 正确识别?
Remote-SSH 解析
的逻辑和命令行
一致,但只认标准字段,且对格式敏感。以下是最小可用模板:
注意点:
每个字段后必须有至少一个空格或 tab 缩进(不能顶格)
路径推荐用
,不要写绝对路径如
(Windows 上 OpenSSH for Windows 支持
)
别加
却不配
,这会让 ssh 直接跳过所有密钥尝试
注释用
,但别写在行尾(有些旧版解析器会吃掉整行)
远程服务器上哪些环境缺失会导致“卡在 Setting up SSH Host”?
这不是认证失败,而是 VSCode Remote-SSH 在远端部署 server 二进制时缺依赖。典型现象:连接成功、能看到 shell 提示符,但 VSCode 界面一直转圈,日志里出现
。
登录服务器后执行这条命令排查:
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
关键要求:
用户
必须是
或
,不能是
或自定义受限 shell
和
必须存在(Alpine 镜像常缺
包,
补)
可写:
要成功(NFS 或容器挂载时权限继承容易出问题)
Windows 用户特别容易踩的坑
Windows 自带 OpenSSH(
)和 Git Bash 自带的 OpenSSH 不共享
,且 config 加载行为略有差异。
建议统一路径:
删掉
设置,让 VSCode 走系统默认
确认
是被 Windows OpenSSH 读的(Git Bash 的 config 默认在
下,不生效)
如果用了 WSL,关掉
(设为
),否则路径解析可能错乱
最稳的做法:在 PowerShell 里跑
成功了,VSCode 基本就不会卡在认证环节。
真正麻烦的从来不是生成密钥或复制公钥,而是 config 文件里一个空格、远程服务器上一个缺失的
、或者 Windows 上两个 OpenSSH 实例之间的静默冲突——这些地方不报错,只默默回退到密码认证。
ssh user@host~/.ssh/configHostIdentifyFile600chmod 600 ~/.ssh/id_ed25519sshremote.SSH.pathssh -F ~/.ssh/config -v myservermyserverHostOffering public keyAuthentication succeeded~/.ssh/config~/.ssh/configsshHost myserver
HostName 192.168.1.100
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Port 2222IdentityFile~C:\Users\name\.ssh\id_rsa~IdentitiesOnly yesIdentityFile#Failed to fetch remote environmentbash -c 'echo $SHELL && which bash tar ps kill mktemp'$SHELL/bin/bash/bin/sh/sbin/nologintarpsprocpsapk add procps$HOMEtouch $HOME/test && rm $HOME/testC:\Windows\System32\OpenSSH\ssh.exessh-agentremote.SSH.path~/.ssh/config/usr/bin/remote.ssh.useLocalServer: truefalsessh -F "$env:USERPROFILE\.ssh\config" myserverps