使用SSH推送GitLab代码失败,提示无项目推送权限如何解决?
GitLab推送权限错误(ERROR: You are not allowed to push code to this project.)解决方法
确认SSH密钥的绑定层级
你生成的id_rsa_2.pub要添加到GitLab账户的SSH密钥列表(账户设置→SSH Keys),而不是仓库的Deploy Keys。仓库级的Deploy Keys默认是只读权限,即便勾选允许推送,也不如账户级密钥直接关联你的身份权限可靠。强制Git为当前仓库使用新密钥
多SSH密钥环境下,Git默认优先用id_rsa,不会自动切换到id_rsa_2。可以通过两种方式指定:- 配置SSH规则:
在~/.ssh/config文件中添加(没有就新建):
然后修改远程仓库地址:Host gitlab-custom HostName gitlab.com User git IdentityFile ~/.ssh/id_rsa_2git remote set-url origin gitlab-custom:<你的用户名>/<仓库名>.git - 推送时临时指定密钥:
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_2" git push origin main
- 配置SSH规则:
验证SSH连接的有效性
执行命令测试新密钥是否能正确连接GitLab:ssh -T -i ~/.ssh/id_rsa_2 git@gitlab.com如果返回
Welcome to GitLab, @<你的用户名>!,说明密钥验证通过;如果失败,检查:- id_rsa_2.pub是否完整添加到GitLab账户
- 私钥权限是否为600(执行
chmod 600 ~/.ssh/id_rsa_2修复)
检查仓库的实际权限配置
即便设置了Everyone with access,也要确认:- 该权限对应的角色是开发者/维护者(允许推送),而非仅访客(只读)
- 你的GitLab账户是否被正确识别为仓库的有权限成员(进入仓库→设置→权限→项目成员查看)
核对Git用户邮箱与GitLab绑定邮箱
虽然全局用户信息不直接影响SSH推送权限,但如果GitLab开启了提交邮箱验证,要确保git config --global user.email是你GitLab账户绑定的邮箱,避免后续提交出现身份不匹配问题。
内容的提问来源于stack exchange,提问作者ua.kvitka
相关产品推荐
相关产品推荐

