GitLab无法推送代码:Permission denied (publickey)问题求助
解决GitLab推送时的Permission denied (publickey)问题
这种公钥权限问题是Git SSH推送最常见的坑之一,别担心,咱们一步步来排查解决:
检查本地SSH密钥对是否存在
先打开终端(或Git Bash),运行以下命令查看你的~/.ssh目录下有没有SSH密钥文件:ls -la ~/.ssh如果看不到类似
id_ed25519(私钥)和id_ed25519.pub(公钥)的文件,说明你还没生成密钥对。可以用这条命令生成(把邮箱换成你GitLab账户绑定的邮箱):ssh-keygen -t ed25519 -C "your_email@example.com"运行后一路按回车就行,不需要设置密码(当然如果想更安全也可以设置,推送时会需要输入)。
把公钥添加到你的GitLab账户
生成密钥后,查看公钥内容并复制:cat ~/.ssh/id_ed25519.pub(如果是用RSA密钥的话,替换成
id_rsa.pub)
登录GitLab后,点击右上角头像 → Settings → SSH Keys,把复制的公钥内容粘贴到「Key」输入框里,给这个密钥起个好记的标题(比如你的本地机器名),然后点击「Add key」。测试SSH连接是否正常
回到终端,运行这条命令测试和GitLab的SSH连接:ssh -T git@gitlab.com如果看到类似
Welcome to GitLab, @你的用户名!的提示,说明连接成功了,这时候再尝试git push origin master应该就能正常推送了。如果测试还是失败,可能是SSH代理没加载你的私钥,先启动SSH代理:
eval "$(ssh-agent -s)"然后把私钥添加到代理:
ssh-add ~/.ssh/id_ed25519额外排查小细节
- 确认你的仓库远程地址是正确的SSH格式(你已经用
git remote -v确认过是git@gitlab.com:projects/MyPrj.git,这部分没问题) - 检查
~/.ssh目录和密钥文件的权限,避免权限太宽导致被拒绝:chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 - 如果你是Windows用户,建议用Git Bash来执行这些命令,避免系统权限或者OpenSSH服务未开启的问题。
- 确认你的仓库远程地址是正确的SSH格式(你已经用
内容的提问来源于stack exchange,提问作者Pietro




