这发生在GitLab 8.6.4的新安装(未升级)上。
我安装了GitLab,我的团队对它进行了评估。 当然我和其他人进入了我们的SSH公钥。
作为我们评估的一部分,我做了一个GitLab备份并将其恢复。
在我恢复了备份之后,新用户Shung Wanginput了他的SSH公钥。
现在,每当我尝试通过SSH访问git仓库时,服务器都认为我是“王”。 例如,当我testing我的Ubuntu 14.04笔记本电脑的SSH连接时,我得到了这个:
ssh -T git@gitserver Welcome to GitLab, Shung Wang!
作为第二个testing,我试图克隆一个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成功了。 我真的正在访问GitLab库作为王Sh。
显然这是一个最令人不满的安全情况。 我如何才能像GwangLa一样访问GitLab仓库?
GitLab维护文件~git/.ssh/authorized_keys ,在这个文件中给出每个SSH公钥名称key-1 , key-2等等。
备份还原时,名称将重置为key-1 ,以便后续键具有重复的名称。 这里是我的~git/.ssh/authorized_keys文件,显示我的密钥和Shung Wang的密钥都被命名为key-1 :
# Managed by gitlab-shell command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAA...2SkSQ== [email protected] ################################################################################################################################################################################### ##################################################################################################################################################################################### command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAA...nKQ== [email protected] ...
显然最后一次出现的key-1都是用于我和Shung的。
我在GitLab问题1263中报告了这个GitLab错误。
在错误修复之前,用户可以尝试这些解决方法。
使用sudo gitlab-rake gitlab:shell:setup来重buildauthorized_keys文件
我build议先尝试解决方法1。
以下是我发现解决方法之前我自己做的事情1。
~git/.ssh/authorized_keys作为key-1 。 如果你发现两个,你有上面描述的问题。 ######...这些行不是装饰。 它们是被用户删除的密钥。 当一个键被删除,GitLab用#replace它中的每个字符,大概是这样,剩下的键不会在文件中移动。 将备份恢复之前创build的所有SSH密钥中的所有字符replace为#字符,方式类似于上面显示的~git/.ssh/authorized_keys显示的方式。 我怀疑你可以简单地将~git/.ssh/authorized_keys移到一边,用一个空文件replace,然后告诉每个人重新input他们的SSH公钥。 但是我没有自己尝试。 如果这对你有用,请在评论中告诉我们。