git push 时提示 Permission denied (publickey),仓库地址没错、账号也有权限。SSH 认证没通过,问题出在本地密钥和平台公钥的对应关系上。

先用详细模式看用了哪把钥匙

ssh -vT git@github.com

输出里会列出尝试过的密钥文件。如果显示的是 id_rsa 而你生成的是 id_ed25519,就是没被加载;如果一把都没尝试,说明 ssh-agent 里没有可用身份。

生成并添加公钥

ssh-keygen -t ed25519 -C "你的邮箱"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub

把输出的整行内容粘到平台的 SSH 设置里,注意不要复制换行或多余空格。Windows 上对应的是 ssh-add 的路径要用实际用户目录。

多套密钥时指定文件

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

写进 ~/.ssh/config 后,同一台机器上既能用公司 Git 也能用个人账号。最后执行 ssh -T git@github.com,看到 successfully authenticated 就说明通了。

常见漏项

公钥贴到了错误的位置,比如把私钥内容复制上去;或者平台账号还没验证邮箱,SSH 权限被限制。还有一种情况是仓库用了 HTTPS 地址,SSH 密钥根本不会参与认证,把 remote 改成 git@ 形式即可。

git remote set-url origin git@github.com:用户名/仓库.git

如果远端是企业自建 Git,端口往往不是 22,config 里要单独写 Port,否则会一直连到错误的 SSH 服务上。

作者 9823189