这发生在 GitLab 8.6.4 的新(未升级)安装中。
我安装了 GitLab,我的团队对其进行了评估。当然,我和其他人输入了我们的 SSH 公钥。
作为我们评估的一部分,我做了一个 GitLab 备份并恢复了它。
恢复备份后,新用户 Shung Wang 输入了他的 SSH 公钥。
现在,每当我尝试通过 SSH 访问 git 存储库时,服务器都会认为我是 Shung Wang。例如,当我从我的 Ubuntu 14.04 笔记本电脑测试我的 SSH 连接时,我得到了这个:
ssh -T git@gitserver
Welcome to GitLab, Shung Wang!
作为第二个测试,我尝试克隆一个 Shung 无权访问的私有存储库:
git clone git@gitserver:sw/devops.git
Cloning into 'devops'...
GitLab: The project you were looking for could not be found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
然后我让 Shung 成为 devops 项目的成员,并且git clone
成功了。我真的以 Shung Wang 的身份访问 GitLab 存储库。
显然,这是一个最不能令人满意的安全局势。除了 Shung Wang,我如何以我自己的身份访问 GitLab 存储库?
解释
GitLab 维护文件
~git/.ssh/authorized_keys
,它在其中为每个 SSH 公钥命名key-1
,key-2
等等。备份还原后,名称将重置为
key-1
,因此后续键具有重复名称。这是我的~git/.ssh/authorized_keys
文件,显示了我的密钥和 Shung Wang 的密钥,它们都命名为key-1
:key-1
显然,我和 Shung 都使用了最后一次出现的。我在GitLab 问题 1263中报告了这个 GitLab 错误。
解决方法
在修复错误之前,用户可以尝试这些变通方法。
解决方法 1
用于重建文件
sudo gitlab-rake gitlab:shell:setup
_authorized_keys
解决方法 2
我建议先尝试解决方法 1。
以下是我在发现解决方法 1 之前自己实际做的事情。
~git/.ssh/authorized_keys
。key-1
如果你找到两个,你就有上面描述的问题。######...
不是装饰。它们是被用户删除的键。当一个键被删除时,GitLab 用一个 替换其中的每个字符#
,大概是这样剩余的键就不会在文件中移动。将备份还原之前创建的所有 SSH 密钥中的所有字符替换#
为类似于上~git/.ssh/authorized_keys
图所示的字符。与其在步骤 3 中进行所有繁琐的编辑,我怀疑您可以简单地将文件移到
~git/.ssh/authorized_keys
一边并用一个空文件替换它,然后告诉每个人重新输入他们的 SSH 公钥。但是我自己没有尝试过。如果这对您有用,请在评论中告诉我们。