VSCode远程连接报“Permission denied (publickey)”主因是本地私钥未被OpenSSH正确加载,需确保私钥权限为600、IdentityFile用绝对路径、~不被展开、authorized_keys目录权限700且文件600。
VSCode 远程连接报
,基本就是本地私钥没被 OpenSSH 正确加载——不是没生成,而是权限、路径或配置有一处没对上。
私钥权限必须是 600,否则 OpenSSH 直接静默跳过
OpenSSH 在读取私钥前会强制校验文件权限,只要不是
(仅所有者可读写),就拒绝加载,且不报错。哪怕公钥已正确写入服务器
,这一步失败,认证流程就终止了。
Linux/macOS:运行
(把
换成你实际用的私钥名)
Windows(Git Bash / WSL):同样用
;PowerShell 不推荐,NTFS 权限需额外用
对齐
别把私钥放 OneDrive、iCloud 或其他同步目录下——它们可能在后台重置权限,导致反复失效
用 VSCode 或 Notepad++(UTF-8 无 BOM)编辑私钥,记事本可能加 BOM 或 CRLF 换行,导致解析失败
~/.ssh/config 里 IdentityFile 必须写绝对路径
VSCode 的 Remote-SSH 插件不展开
,哪怕你在终端里写
能通,放到
里也会被忽略。它只认字面意义的路径。
正确写法:
(Linux/macOS)或
(Windows Git Bash)
加一行
,避免 SSH agent 或其他密钥干扰当前 Host 的匹配
Host 别名要和你在 VSCode 命令面板里选的一致,比如配置了
,就要选
,不能填
验证是否真走了 config:打开命令面板 →
,看
那行是否带上了
和你指定的
远程服务器环境缺失会导致卡在 “Setting up SSH Host”
这不是认证失败,而是 VSCode Server 二进制部署失败。它需要几个基础命令和可写环境,缺一不可。
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
手动登录服务器,执行:
,输出里缺任何一个都要补装(Alpine 用户常缺
)
检查
里用户默认 shell 是否为
或
;
或自定义受限 shell 会直接退出
确认
可写:
,NFS、SELinux、容器挂载场景下容易出问题
删掉残留的半截安装:
,首次连接失败后这个目录常卡住后续尝试
远端 ~/.ssh/authorized_keys 权限比本地还关键
服务端权限不对,SSH 守护进程会直接拒收公钥,连日志都不留痕迹。这是最常被忽略的环节。
目录权限必须是
:
文件权限必须是
:
用户家目录(
)权限不能太宽,建议
或更严格;
会导致服务端拒绝读取
确认
里
已启用,且未被
注释
真正卡点往往不在 VSCode 设置里,而在 OpenSSH 客户端行为与服务端策略的交界处——比如本地权限松了、远程目录权限松了、
路径写错了、或者
多打了行
。先用终端
验证,再进 VSCode,能省掉一半排查时间。
Permission denied (publickey)600~/.ssh/authorized_keyschmod 600 ~/.ssh/id_ed25519id_ed25519chmod 600icacls~~/id_ed25519configIdentityFile /home/you/.ssh/myserver_keyIdentityFile C:\Users\you\.ssh\myserver_keyIdentitiesOnly yesHost myservermyserveruser@hostRemote-SSH: Show LogRunning script with connection command-F /path/to/config-i /abs/path/to/keybash -c 'echo $SHELL && which bash tar ps kill'procps/etc/passwd/bin/bash/bin/sh/sbin/nologin$HOMEtouch $HOME/test && rm $HOME/testrm -rf ~/.vscode-server~/.ssh700chmod 700 ~/.ssh~/.ssh/authorized_keys600chmod 600 ~/.ssh/authorized_keys~755777authorized_keys/etc/ssh/sshd_configPubkeyAuthentication yes#config.bashrcechossh -T user@host