VSCode连GitHub需确保git命令行SSH认证正常:①remote必须为SSH格式(git@github.com:u/r.git);②私钥存在且路径正确(如自定义名需配置~/.ssh/config);③用ssh -T git@github.com测试;④VSCode不管理SSH凭据,终端git push成功则VSCode必成功。

VSCode 连 GitHub 不需要在 VSCode 里“配置密钥”,而是必须让底层 git 命令能通过 SSH 正确认证——所有推送失败、Permission denied (publickey)、Publish to GitHub 按钮灰掉,根源都在 SSH 认证链断了。
确认 remote 地址是不是 SSH 格式
VSCode 的 Git 操作完全依赖 git 命令行行为,而它只认 remote URL 的协议类型。如果你用 HTTPS 地址克隆(如 https://github.com/username/repo.git),哪怕配了 SSH 密钥也完全没用。
- 检查当前 remote:
git remote get-url origin - 如果是 HTTPS,立刻切到 SSH:
git remote set-url origin git@github.com:username/repo.git - SSH 地址必须是
git@github.com:username/repo.git格式,不是ssh://git@github.com/...,也不是带端口的变体(除非你自定义了 GitHub SSH 端口,极少见)
验证私钥是否存在且路径正确
VSCode 不管密钥在哪,它调用 git 时,由系统 SSH 客户端负责加载私钥。默认只找 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519;如果你用了自定义名字(比如 id_github),git 就会直接跳过,报错 Permission denied (publickey)。
- 列出已有密钥:
ls -l ~/.ssh/id_*.pub - 如果只有
id_github.pub,就得显式告诉 SSH 用哪个:echo "Host github.com\n IdentityFile ~/.ssh/id_github" >> ~/.ssh/config - 确保私钥权限严格:
chmod 600 ~/.ssh/id_github(否则 SSH 会拒绝加载)
测试 SSH 连通性必须用 git@github.com
别用 ssh -T user@github.com 或 ssh -T git@xxx.com,GitHub 只响应 git@github.com 这个固定用户+主机组合。其他任何变体都会失败或走错路由。
- 运行:
ssh -T git@github.com - 成功返回:
Hi username! You've successfully authenticated... - 失败常见原因:
Could not resolve hostname github.com(DNS 问题)、Connection timed out(防火墙/代理拦截 SSH 端口 22)、Bad owner or permissions(.ssh目录权限太松,应为700)
VSCode 内部不缓存也不管理 SSH 凭据
很多人以为在 VSCode 左下角点 GitHub 图标登录,就等于“连上了 GitHub”。其实那只是给 GitHub 扩展(Issues、PR 面板)用的 OAuth Token,和 git push 完全无关。VSCode 本身从不读取、不存储、不转发你的 SSH 私钥。
- 它只做一件事:在你点“同步”或执行终端里的
git push时,原样调用系统git - 所以只要
git push在终端里能成功,VSCode 里就一定可以;反之,终端失败,VSCode 必然失败 - 排查时永远先关掉 VSCode,在终端里手动跑一遍
git push,看真实报错
最容易被忽略的是:SSH 配置文件(~/.ssh/config)里 Host 别名写成 github,但 remote 地址还是 git@github.com:...——SSH 客户端根本不会匹配这个别名,因为 Host 行必须和实际连接的主机名完全一致(这里是 github.com)。别名只在你用 ssh github 或 git@github 这种地址时才生效。


















