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 服务上。