vscode不生成ssh密钥,仅调用系统ssh-agent和本地密钥;配置失败主因是密钥未正确生成(须用ssh-keygen -t ed25519 -c "邮箱"存默认路径)、未执行ssh-add加载私钥、或remote url未手动改为git@开头的ssh格式。

VSCode 本身不生成或管理 SSH 密钥,它只调用系统 ssh-agent 和本地密钥文件;配置失败的绝大多数情况,是密钥没生成对、没加进 agent、或 remote URL 没切到 SSH 格式。
ssh-keygen 生成密钥时必须指定 -t ed25519 且用默认路径
别用 ssh-keygen -t rsa,RSA 已逐渐被主流平台弱支持(GitHub 自 2023 年起对 RSA-SHA-1 警告,Gitee/GitLab 也收紧策略)。ED25519 更快更安全,且兼容性更好。
正确命令是:
ssh-keygen -t ed25519 -C "your_email@example.com"
执行后:
- 看到 Enter file in which to save the key 提示时,直接回车 → 保存到 ~/.ssh/id_ed25519
- 若手动改了路径(比如存到桌面),后续 ssh-add 和 VSCode 都找不到它
- -C 参数不能省,邮箱要和你在 GitHub/GitLab 账户绑定的完全一致,否则平台无法关联身份
ssh-add 必须运行,且私钥路径要准确
生成完密钥只是第一步。VSCode 的 Git 操作依赖系统 ssh-agent 加载私钥,否则每次 push 都会卡在 Permission denied (publickey)。
操作顺序不能错:
- 先启动 agent:
eval $(ssh-agent -s)(Linux/macOS)或Start-Service ssh-agent(Windows PowerShell) - 再加载私钥:
ssh-add ~/.ssh/id_ed25519(注意:不是.pub文件!) - 验证是否成功:
ssh-add -l应输出类似256 SHA256:xxx id_ed25519 (ED25519)
常见坑:
- Windows 用户用 Git Bash 运行 ssh-add 前,得确认 ssh-agent 已启动(Git Bash 默认不自动启)
- macOS Monterey 及以后版本,ssh-add -K 已废弃,改用 ssh-add --apple-use-keychain 才能持久化
remote origin 必须手动改成 SSH URL,不能靠 VSCode 自动识别
VSCode 的源代码管理面板不会帮你把 HTTPS 地址转成 SSH。哪怕你密钥全配好了,remote 还是 https://github.com/user/repo.git,push 时照样弹密码框。
检查并修正方法:
git remote get-url origin
如果不是以 git@ 开头(如 git@github.com:user/repo.git),立刻换掉:
git remote set-url origin git@github.com:user/repo.git
不同平台格式差异:
- GitHub:
git@github.com:username/repo.git - Gitee:
git@gitee.com:username/repo.git - GitLab 自建站:
git@gitlab.company.com:group/project.git(注意域名和路径)
改完后,用 ssh -T git@github.com(或对应域名)测试连通性,成功返回 Hi username! You've successfully authenticated... 才算真正打通。
VSCode 终端里 git push 失败?先看它用的是哪个 shell 和 git
VSCode 内置终端可能默认用 PowerShell、zsh 或 bash,而不同 shell 下 ssh-agent 环境变量不互通。你在 zsh 里 ssh-add 成功了,切到 PowerShell 就又失效。
解决办法:
- 在 VSCode 设置里搜 terminal integrated default profile,统一设成你配好 ssh-agent 的那个 shell
- 或者,在 VSCode 终端一打开就手动运行 eval $(ssh-agent -s) 和 ssh-add ~/.ssh/id_ed25519
- 最关键:运行 which git 和 git --version,确保它调用的是你系统安装的 Git,而不是 VSCode 自带的阉割版(尤其 Windows 上 Git for Windows 没加进 PATH 时)











