踩坑记录:GitLab SSH 拉取失败,竟是权限问题在作祟
·
最近在配置 GitLab SSH Key 时,遇到了一个看似简单却让人头大的问题:明明已经把公钥添加到了 GitLab,但是拉取代码时却一直失败,提示权限被拒绝。经过一番排查,终于发现问题的根源——本地 SSH 私钥文件的权限设置不对。
一、问题现象
当我执行 git clone git@gitlab.com:xxx/xxx.git 或者 git pull 时,终端返回了如下错误:
git@gitlab.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我第一反应是:公钥是不是没加对?于是我又去 GitLab 检查了一遍,确认公钥内容完全一致,标题也没问题。但问题依旧存在。
二、排查过程
1. 验证 SSH 连接
我先执行了 GitLab 官方推荐的验证命令:
ssh -T git@gitlab.com //可修改为公司部署地址
返回的结果依然是 Permission denied,这说明问题确实出在本地 SSH 配置上,而不是 GitLab 端。
2. 检查本地 SSH 目录
Windows右键打开git bash
我查看了 .ssh 目录下的文件和权限:
ls -al ~/.ssh
输出如下:
drwxr-xr-x 1 1586662930 1049089 0 Feb 12 08:50 ./
drwxr-xr-x 1 1586662930 1049089 0 Feb 12 11:10 ../
-rw-r--r-- 1 1586662930 1049089 2610 Feb 7 2025 id_rsa
-rw-r--r-- 1 1586662930 1049089 575 Feb 7 2025 id_rsa.pub
-rw-r--r-- 1 1586662930 1049089 282 Feb 7 2025 known_hosts
-rw-r--r-- 1 1586662930 1049089 101 Feb 7 2025 known_hosts.old
这里的关键信息是 id_rsa(私钥)的权限是 -rw-r--r--(即 644)。
3. 问题根源:权限过宽
SSH 协议对私钥文件的权限有严格的安全要求。如果私钥文件的权限太开放,允许同组或其他用户读取,SSH 客户端会认为这是一个安全风险,从而拒绝使用这个密钥进行身份验证。
- 正确的私钥权限:
600(只有文件所有者才有读写权限,其他用户无任何权限) - 正确的目录权限:
700(只有文件所有者才有读写执行权限)
我之前的私钥权限是 644,这就导致了 SSH 客户端拒绝使用它,从而引发了权限被拒绝的错误。
三、解决方案
1. 修正文件权限
在终端中执行以下两条命令,分别修正 .ssh 目录和私钥文件的权限:
# 修正 .ssh 目录权限
chmod 700 ~/.ssh
# 修正私钥文件权限
chmod 600 ~/.ssh/id_rsa
2. 再次验证连接
权限修正后,再次执行验证命令:
ssh -T git@gitlab.com
如果配置正确,你会看到欢迎信息:
Welcome to GitLab, @你的用户名!
这表明 SSH 连接已经成功建立,现在可以正常拉取和推送代码了。
四、总结与预防
- 核心原因:GitLab SSH 拉取失败,提示
Permission denied,很可能是本地私钥文件id_rsa的权限设置过宽(如 644),导致 SSH 客户端出于安全考虑拒绝使用该密钥。 - 解决步骤:
- 使用
chmod 600 ~/.ssh/id_rsa修正私钥权限。 - 使用
chmod 700 ~/.ssh修正目录权限。 - 用
ssh -T git@gitlab.com验证连接。
- 使用
- 预防建议:
- 生成 SSH Key 后,养成检查权限的习惯。
- 不要随意修改
.ssh目录及其内部文件的权限。 - 私钥
id_rsa是敏感信息,绝对不能泄露给他人。
希望这篇踩坑记录能帮到遇到同样问题的朋友,避免在权限问题上浪费太多时间。
更多推荐




所有评论(0)