ssh密钥未正确配置导致permission denied (publickey):需检查密钥存在性、添加公钥到平台、启动ssh-agent并加载私钥、修复私钥权限(chmod 600),最后用ssh -t验证。

git clone 报 Permission denied (publickey) 怎么办
这不是仓库不存在,也不是你没权限看代码,而是 GitHub/GitLab/Gitee 根本没认出你是谁——SSH 密钥链断了。
常见现象:git clone git@github.com:facebookresearch/detectron2.git 直接失败,提示 fatal: Could not read from remote repository;但换成 HTTPS 地址就能克隆成功。
- 先确认密钥是否存在:
ls -al ~/.ssh/,重点找id_ed25519或id_rsa及对应.pub文件 - 如果没生成过,用
ssh-keygen -t ed25519 -C "your_email@example.com"生成(别用默认路径以外的位置,除非你明确配置了~/.ssh/config) - 把公钥内容复制进 GitHub/Gitee 账户的
SSH and GPG keys设置页(注意:是id_*.pub文件内容,不是私钥) - 测试连通性:
ssh -T git@github.com,看到Hi username! You've successfully authenticated...才算过关
npm install 报 npm error git@github.com: Permission denied (publickey)
这通常不是 npm 的问题,而是某个依赖项(比如 libsignal-node)在 package.json 里写了 SSH 地址,而你的系统没配好 SSH 认证。
真实场景:你没动过 Git 配置,但某次 npm install 突然卡住报这个错,大概率是新装的包用了 SSH 源。
- 快速绕过(推荐临时用):
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/",强制所有 GitHub 地址走 HTTPS - 长期解决必须配 SSH:确保
ssh-agent已启动,并加载了私钥:eval "$(ssh-agent -s)"→ssh-add ~/.ssh/id_ed25519 - Windows 用户注意:Git Bash 和 CMD/PowerShell 的
ssh-agent是隔离的,别在 Git Bash 配好了,又切到 VS Code 终端里重来一遍
git push 被拒,提示 pre-receive hook declined 或 remote: Permission to user/repo denied
前者说明分支被保护(比如主分支禁止直推),后者说明你压根没写权限——这是两个完全不同的权限层级,不能混着查。
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
典型误判:看到 “Permission denied” 就去重配 SSH,结果白忙活。先看错误全文:
- 含
pre-receive hook declined:目标分支(如main)启用了保护规则,你得推到新分支再提 PR,命令是git checkout -b feat/login→git push origin feat/login - 含
remote: Permission to+ 仓库名:你不是该仓库的协作者,也没 Fork 权限,联系管理员加你进成员列表,或先Fork到自己账号下再操作 - HTTPS 推送报 403:检查凭据是否过期,Windows 去「凭据管理器」删掉所有
gitee.com或github.com条目;Mac 去「钥匙串访问」搜 git 删除对应互联网密码
私钥权限不对也会触发 Permission denied (publickey)
SSH 很较真:只要私钥文件能被组或其他人读取,它就拒绝加载,连试都不试——所以你可能明明配对了、也加进 agent 了,还是报错。
最容易忽略的点:在 macOS/Linux 上用 chmod 600 ~/.ssh/id_ed25519;Windows 上则要右键文件属性 → 安全 → 只保留当前用户“读取”权限,去掉“继承权限”并删除其他用户条目。
验证方式:ssh -vT git@github.com(加 -v 看详细日志),如果输出里有 Offering public key 但没后续,基本就是私钥权限或路径问题。
别信“我之前一直好好的”,一次系统更新、一次 IDE 自动同步、甚至一次误拖文件进共享文件夹,都可能悄悄改掉权限位。










