Git拉取/推送GitLab私有仓库报Permission denied (publickey)问题咨询
问题根因
从你提供的ssh -Tv git@gitlab.com执行日志可以明确两个核心信息:
- SSH密钥本身和GitLab账号的绑定是正常的,手动执行SSH命令输入私钥密码后可以正常完成鉴权
- 报错核心原因是你的SSH私钥设置了访问密码(passphrase),且系统未运行SSH密钥代理服务缓存密码,Git执行推拉操作时无法唤起交互终端输入私钥密码,导致鉴权失败。
排查思路
- 优先确认本地SSH代理服务运行状态
- 其次确认本地仓库的远程地址是否为SSH协议格式
- 最后排查SSH配置文件是否存在异常规则
解决方案
方案1:启用ssh-agent缓存私钥密码(推荐,兼顾安全与易用性)
- 以管理员身份打开PowerShell,执行命令启动ssh-agent服务:
Start-Service ssh-agent
- (可选)设置ssh-agent开机自启,避免每次系统重启后都要重新启动服务:
Set-Service -Name ssh-agent -StartupType Automatic
- 将本地私钥添加到ssh-agent缓存,执行后输入你设置的私钥密码即可完成缓存:
ssh-add C:\Users\ASUS\.ssh\id_rsa
- 重新执行Git推拉操作验证是否恢复正常。
方案2:移除私钥访问密码(安全性较低,仅适合临时测试使用)
如果不需要私钥密码保护,可以直接移除passphrase,执行命令后输入旧密码,新密码留空连续回车两次即可:
ssh-keygen -p -f C:\Users\ASUS\.ssh\id_rsa
方案3:校验仓库远程地址
如果上述操作都无效,检查本地仓库的远程地址是否为SSH协议:
- 执行命令查看远程地址配置:
git remote -v
- 如果origin对应的地址是
https://gitlab.com/开头的HTTPS格式,替换为SSH格式即可:
git remote set-url origin git@gitlab.com:你的GitLab用户名/仓库名称.git
内容的提问来源于stack exchange,提问作者Ahmed Rajab
相关产品推荐
相关产品推荐

