Git报错Permission denied_Git权限问题排查与解决

酷浩同学_7312

酷浩同学_7312

2026-05-22

1217人浏览

原创

ssh -t git@github.com 返回 permission denied (publickey) 表明 ssh 认证失败,需依次检查:ssh-add -l 是否列出私钥、是否运行 eval "$(ssh-agent -s)"、私钥权限是否为 600、~/.ssh/config 中 identityfile 路径是否正确、公钥是否完整无误添加到 github。

git报错permission denied_git权限问题排查与解决

这不是 Git 本身的问题,而是 SSH 认证失败或远程权限不足。你连不上服务器,或者连上了但没写权限——Git 只是把底层错误原样抛出来。

ssh -T git@github.com 返回 Permission denied (publickey)

说明密钥链断了,SSH 根本没认出你是谁。别急着重装 Git 或改 remote 地址,先跑这行命令验证:

ssh -T git@github.com

如果输出 Permission denied (publickey),按顺序检查以下几点:

  • ssh-add -l 是否列出你的私钥?没输出就代表没加载成功
  • 是否执行过 eval "$(ssh-agent -s)" 启动 agent?Windows 用户注意:Git Bash、PowerShell、VS Code 内置终端三者互不共享 agent
  • 私钥文件权限是不是 600?运行 chmod 600 ~/.ssh/id_ed25519(别用 id_ed25519.pub)
  • ~/.ssh/config 里有没有写错 IdentityFile 路径?比如后缀误写成 .pub,或用了 $HOME 变量(SSH 不解析)
  • 公钥内容是否完整复制?cat ~/.ssh/id_ed25519.pub 必须是一整行,开头是 ssh-ed25519,结尾是你邮箱,不能有多余空格或换行

git push 报 remote: Permission to user/repo.git denied to xxx

恭喜,SSH 认证通过了,但你没仓库写权限。这类错误和密钥无关,别再反复配 key。

先确认当前 remote 地址:git remote get-url origin

然后对照排查:

  • 如果是推到自己 fork 的仓库,但 remote 还指向上游(如 facebookresearch/detectron2),那就是地址设错了,该改成你自己的:git remote set-url origin git@github.com:yourname/detectron2.git
  • 如果是私有仓库,去 GitHub/GitLab 页面点 Settings → Collaborators / Members,确认你账号被授予 write 或更高权限
  • HTTPS 方式下,系统凭据可能缓存了旧账号:macOS 查 Keychain Access,Windows 打开 Credential Manager,删掉对应 host 的记录

子模块报 Permission denied (publickey),但主仓库正常

因为 .gitmodules 文件里硬编码了 SSH 地址,比如 url = git@github.com:org/subrepo.git。即使你用 HTTPS 克隆主仓,子模块仍会走 SSH。

Github Stars Analyzer
Github Stars Analyzer

抓取指定 GitHub用户的 Stars 项目,生成标准化中文 Markdown 报告。用户提及「分析 GitHub stars」「导出收藏项目」「汇总 GitHub 星标」「生成 stars 报告」或粘贴含 ?tab=stars 的链接时触发。执行通过 bash...

下载

临时绕过(适合公开仓库):

运行这条命令强制所有子模块改用 HTTPS:

git config --global url."https://github.com/".insteadOf "git@github.com:"

长期方案必须配好 SSH,并确保子模块地址也匹配你的 ~/.ssh/config 中定义的 Host 别名。

注意:如果子模块是私有仓库,HTTPS 方式需配合 PAT(Personal Access Token),不能直接输密码。

npm install 报 git@github.com: Permission denied (publickey)

不是 npm 的问题,是某个依赖在 package.json 里写了 SSH 地址(比如 "libsignal-node": "git+ssh://git@github.com:signalapp/libsignal-node.git")。

快速定位方法:

  • 看报错里出现的具体仓库路径,复制它,手动执行 git ls-remote git@github.com:xxx/yyy.git 测试
  • 若失败,说明该仓库的 SSH 认证没通——和主项目是否能 clone 无关,每个 SSH 地址都得单独认证
  • 临时解决仍可用全局替换:git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"

最易被忽略的是:Windows 下不同终端的 ssh-agent 彼此隔离,你在 Git Bash 配好了,切到 VS Code 终端里照样报错;还有私钥权限不是 600 时,ssh-add 会静默失败,根本不会提醒你。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

git

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

5879

9

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1740

6

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

1014

5

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

3837

7

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

3541

6

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

2026.10.10

0

15

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

2026.10.10

0

26

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

2026.10.10

0

32

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

2026.10.10

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习