SSH认证方式无法向GitLab远程仓库执行git push操作求助
这种情况确实挺让人头疼的——明明ssh -T gitlab能成功返回欢迎信息,偏偏执行git push就报公钥权限拒绝的错误,我之前也碰到过类似的坑,给你几个实用的排查和解决方向:
检查本地Git仓库的远程地址是否匹配SSH配置
很多时候问题出在远程地址的写法上:你的~/.ssh/config里配置的Host是gitlab,但如果本地仓库的远程地址还是默认的git@gitlab.com:你的用户名/你的仓库名.git,那Git在push时不会自动关联到你配置的密钥文件。
先查看当前远程地址:git remote -v如果地址里是
gitlab.com而不是你配置的Host名gitlab,可以修改成匹配的格式:git remote set-url origin git@gitlab:你的用户名/你的仓库名.git调试Git Push时实际使用的SSH密钥
直接看Git在push过程中用了哪个密钥,能快速定位问题。执行带调试信息的push命令:GIT_SSH_COMMAND="ssh -v" git push看输出里的
debug1: identity file xxx相关内容,确认是不是指向你配置的~/.ssh/conf.d/personal/id_ed25519_gitlab。如果不是,说明Git没读取到你的SSH配置文件。确保SSH配置文件和目录的权限符合要求
SSH对文件权限的要求非常严格,权限不对会直接忽略配置:- 把
~/.ssh目录权限改成700:chmod 700 ~/.ssh - 把
~/.ssh/config文件权限改成600:chmod 600 ~/.ssh/config
另外,也可以试试把IdentityFile的路径改成绝对路径,比如/home/你的用户名/.ssh/conf.d/personal/id_ed25519_gitlab,避免相对路径解析出错。
- 把
确认GitLab仓库的访问权限
虽然你能通过SSH登录GitLab,但要确保你的账号确实拥有目标仓库的push权限:
登录GitLab网页端,进入目标仓库的「Settings」→「Members」,检查你的账号是否在成员列表里,且权限至少是「Developer」级别(只有Guest权限是无法push的)。排查SSH Agent缓存的旧密钥
有时候SSH Agent会缓存旧的密钥,导致Git用了错误的密钥进行认证。可以重启Agent并重新添加你的密钥:# 关闭当前SSH Agent ssh-agent -k # 重新启动Agent eval $(ssh-agent -s) # 添加你的GitLab密钥 ssh-add ~/.ssh/conf.d/personal/id_ed25519_gitlab完成后再尝试执行
git push。
备注:内容来源于stack exchange,提问作者Nine

