permission denied (publickey) 是因 ssh 密钥未正确配置:本地缺密钥对、私钥权限非600、ssh-agent 未运行或未加载密钥、公钥未添加至 github,或终端环境隔离导致 agent 状态不共享。

为什么 git clone git@github.com 报 Permission denied (publickey)
这不是仓库不存在,也不是你没权限看代码,而是 GitHub 根本没认出你是谁——SSH 密钥链断了。You've successfully authenticated 才算过关。真实场景里,你可能刚 npm install 一个新包,它依赖里写了 git+ssh://... 地址,结果整个安装卡在 SSH 认证上,报的正是这个错。
检查本地有没有可用的 SSH 密钥对
先确认 ~/.ssh/ 目录下有没有成对的私钥和公钥文件:
-
ls -al ~/.ssh/id_*.pub看有没有id_ed25519.pub或id_rsa.pub - 对应私钥不能缺(比如有
id_ed25519.pub就必须有id_ed25519) - 私钥权限必须是
600:运行chmod 600 ~/.ssh/id_ed25519,否则 SSH 客户端会直接拒绝加载 - 如果啥都没有,用
ssh-keygen -t ed25519 -C "you@example.com"生成一对,全部回车默认即可
ssh-agent 是否运行并加载了私钥
Windows 用户尤其容易在这里翻车:Git Bash、PowerShell、VS Code 内置终端三者互不共享 ssh-agent 状态。哪怕你在 Git Bash 里配好了,切到 VS Code 终端照样报错。
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
- 先启动 agent:
eval "$(ssh-agent -s)" - 再加载私钥:
ssh-add ~/.ssh/id_ed25519(路径按你实际的改) - 验证是否生效:
ssh-add -l应该列出你的密钥指纹 - 最后测试连通性:
ssh -T git@github.com,看到You've successfully authenticated才算真正通了
GitHub/GitLab/Gitee 上公钥是否已正确添加
生成了密钥、本地也加进 agent 了,但还是报错?大概率是公钥根本没贴到远端平台。
- 用
cat ~/.ssh/id_ed25519.pub复制整段内容(从ssh-ed25519开始,到邮箱结束,**不要多空格、不要少字符、不要换行**) - 去 GitHub Settings → SSH and GPG keys → New SSH key,Title 随便填,Key type 选 Authentication Key,粘贴进去保存
- 注意:Gitee 和 Coding 有些老版本服务器不支持 ED25519,若仍失败,可临时加配置启用 RSA 兼容:
Host *.gitee.com\n HostkeyAlgorithms +ssh-rsa\n PubkeyAcceptedAlgorithms +ssh-rsa,写入~/.ssh/config
最容易被忽略的是环境隔离问题:不同终端、不同 IDE 的 shell 会话之间,ssh-agent 是各自独立的。每次新开终端都得重新 eval 和 ssh-add,或者把这两行加进 shell 初始化文件(如 ~/.bashrc 或 ~/.zshrc)里自动执行。










