vscode报permission denied主因是git路径不一致、ssh环境未继承或凭据冲突;需先用where/which git确认路径,统一配置git.path,再检查~/.ssh/config绑定密钥、确保remote为ssh格式、清理凭据管理器并设置私钥权限为600。

VSCode 用 Git 报 Permission denied (publickey) 或 EACCES,八成不是密码错了、也不是没配密钥,而是它压根没走你预期的那条路——Git 路径不一致、SSH 环境没继承、凭据被拦截、甚至文件权限都卡在底层。
确认 VSCode 用的是哪个 git.exe
VSCode 和 Git Bash 很可能在调用两个不同位置的 git.exe:一个是你手动配好 SSH 的(比如 C:Program FilesGitingit.exe),另一个是系统 PATH 里排前面但没配密钥的(比如 C:msys64usringit.exe)。路径不对,后面所有配置都白搭。
- 在 VSCode 内置终端里运行
where git(Windows)或which git(macOS/Linux) - 在 Git Bash 里同样运行
where git或which git - 对比输出路径;如果不一致,就进 VSCode 设置(
Ctrl + ,)搜git.path,在settings.json里填入 Git Bash 中查到的完整路径,Windows 上注意用双反斜杠:"git.path": "C:\Program Files\Git\bin\git.exe" - 改完必须重启 VSCode —— 终端不会热更新这个配置
检查 ~/.ssh/config 是否显式指定了密钥
即使 git.exe 路径对了,VSCode 也不会自动执行 ssh-add,所以它很可能根本没加载你的私钥。这时靠 ~/.ssh/config 显式绑定 Host 和密钥最可靠。
- 确保
~/.ssh/id_ed25519(或id_rsa)存在,且对应公钥已加到 GitHub/GitLab - 在
~/.ssh/config中写入(Host名必须和远程 URL 的 host 完全一致):Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519
- Windows 用户注意:
~指的是C:Users你的用户名,别写%USERPROFILE%;IdentityFile路径不能带.pub后缀 - 保存后,在 VSCode 终端里手动运行
ssh -T git@github.com验证;看到Hi xxx! You've successfully authenticated才算真正通了
验证 remote 地址是不是 SSH 格式
VSCode 的 Git 面板不会帮你把 HTTPS 自动转成 SSH。如果你 clone 的是 https://github.com/user/repo.git,后续所有操作都走 HTTPS,哪怕你密钥配得再完美也没用。
- 进项目根目录,在 VSCode 终端运行:
git remote get-url origin - 如果输出是
https://开头,立刻改成 SSH:git remote set-url origin git@github.com:user/repo.git - 再跑一次
git remote get-url origin确认已变成git@开头 - 特别注意:GitHub 新建仓库默认给 HTTPS 地址,复制时务必手动切到 SSH 标签页再复制
清理凭据管理器里的旧条目
HTTPS 协议下报 ECONNREFUSED 或 Access denied,往往不是网络问题,而是 VSCode 的凭据弹窗机制失效(vscode-git.sock 断连),导致 Git 拿不到 token。
- 临时救急:在 VSCode 终端里执行
GIT_ASKPASS="" git push origin main,它会退回到命令行输入模式,让你手动输 GitHub 用户名 + 个人访问令牌(PAT) - 长期解决:进 Windows 凭据管理器(Control Panel → User Accounts → Credential Manager),删掉所有含
git:或github.com的条目 - macOS 用户请打开 Keychain Access,搜索
github或git,删掉过期或冲突的 Internet Password 条目
最容易被忽略的一点:私钥文件权限。OpenSSH 在 Windows Git Bash 或 WSL 下对 ~/.ssh/id_ed25519 的权限极其敏感——如果被设成“所有人可读”,ssh-add 会静默拒绝加载,而你完全看不到错误提示。务必运行 chmod 600 ~/.ssh/id_ed25519(Linux/macOS/WSL)或 icacls ~/.ssh/id_ed25519 /reset /inheritance:r /grant:r "$env:USERNAME:(R)"(PowerShell)。











