You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH远程连接后执行Git Push失败,提示公钥权限拒绝

解决SSH会话中Git Push/Pull报Permission Denied(publickey)的问题

嘿,我之前也遇到过一模一样的问题!本地操作Git完全正常,但SSH远程登录后push/pull就报公钥权限拒绝,其实核心原因大多是SSH会话的环境没正确加载你的GitLab密钥,或者会话的用户和你本地操作时不一样。咱们一步步来排查解决:

  • 先确认SSH会话的用户是否和本地一致
    有时候SSH登录后可能默认用了root或者其他用户,和你本地操作Git的用户不是同一个。分别在本地和SSH会话里执行:

    whoami
    

    对比两次输出的用户名,如果不一样,要么切换回你本地用的用户(比如su - 你的用户名),要么给当前SSH会话的用户配置对应的GitLab SSH密钥。

  • 检查SSH会话是否加载了密钥
    本地操作时,ssh-agent通常已经帮你自动加载了密钥,但SSH远程会话默认不会继承这个agent的状态。在SSH会话里执行:

    ssh-add -l
    

    如果输出Could not open a connection to your authentication agent.,说明ssh-agent没启动;如果显示没有任何密钥,就是密钥没加载。解决步骤:

    1. 启动ssh-agent:
      eval "$(ssh-agent -s)"
      
    2. 添加你的GitLab密钥(替换成你的密钥文件名,比如id_rsa):
      ssh-add ~/.ssh/id_rsa
      

    完成后再试git push origin master,大概率就能正常运行了。

  • 验证SSH连接GitLab的有效性
    在SSH会话里执行以下命令(如果是自建GitLab,替换成你的GitLab域名):

    ssh -T git@gitlab.com
    

    如果还是报Permission Denied,检查密钥文件的权限是否正确:

    • 密钥文件权限必须是600:
      chmod 600 ~/.ssh/你的密钥文件名
      
    • ~/.ssh目录权限必须是700:
      chmod 700 ~/.ssh
      

    同时再确认下这个密钥已经添加到你的GitLab账户的SSH密钥列表中(虽然你说两台设备都配置了,但要确保当前SSH会话用户的密钥确实在GitLab里)。

  • 配置自动加载密钥(可选)
    如果每次SSH登录都要手动启动agent和添加密钥太麻烦,可以把相关命令加到你的shell配置文件里(比如~/.bashrc或~/.zshrc,取决于你用的shell):

    if [ -z "$SSH_AUTH_SOCK" ]; then
        eval "$(ssh-agent -s)"
        ssh-add ~/.ssh/id_rsa
    fi
    

    这样每次SSH登录后都会自动加载密钥,不用再手动操作。

内容的提问来源于stack exchange,提问作者Addy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:39:11