GitLab配置SSH密钥验证通过,git clone仍提示无法读取远程仓库
问题根因
- 核心原因是你执行clone命令时添加了
sudo前缀:sudo会切换到root用户身份执行命令,而你之前配置的SSH私钥存放在普通用户user的~/.ssh/目录下,ssh-add也仅把密钥加载到了普通用户的ssh-agent会话中。root用户既没有对应的私钥文件,也无权访问普通用户的ssh-agent缓存,因此GitLab公钥鉴权直接失败。 - 你之前执行的
ssh -T git@gitlab.com是在普通用户身份下运行,所以可以正常验证通过。
排查验证步骤
- 执行普通用户身份的SSH验证,确认基础配置正常:
ssh -T git@gitlab.com
如果返回Welcome to GitLab, @alramdein!即可确认普通用户的SSH配置完全无问题。
2. 执行sudo下的SSH验证,确认身份切换导致的问题:
sudo ssh -T git@gitlab.com
返回的报错和clone报错一致,即可100%确认根因。
解决方案
根据你的场景选择对应方案即可:
方案1:调整目录权限(优先推荐)
如果/var/www目录不需要严格保留root权限,先把目录所有者改为当前用户,直接用普通用户clone即可:
sudo chown -R $USER:$USER /var/www git clone git@gitlab.com:repo/repo.git
该方案不会改动SSH配置,也没有额外安全风险。
方案2:保留sudo权限执行clone
如果/var/www目录必须保留root写入权限,可选以下两种操作:
- 临时将当前用户的ssh-agent挂载到sudo会话:
sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK git clone git@gitlab.com:repo/repo.git
该操作仅单次生效,不会遗留永久权限配置,安全性较高。
- 给root用户配置SSH私钥:将普通用户的私钥复制到root的SSH目录下并修改权限,该操作会让root永久拥有你的GitLab账号访问权限,非特殊场景不建议使用。
方案3:切换HTTPS协议clone(临时快速解决)
不想调整SSH权限的话,直接换成仓库的HTTPS clone链接,执行时输入GitLab账号密码或个人访问令牌即可:
sudo git clone https://gitlab.com/repo/repo.git
内容的提问来源于stack exchange,提问作者alramdein
相关产品推荐
相关产品推荐

