在Google计算引擎中使用GitLab时,Git push/pull失败

6

我使用项目界面上的“点击部署”在Google Compute Engine上安装了GitLab。几分钟后,部署成功。我可以通过SSH登录到实例,并像预期的那样进行操作。

我还可以使用Web界面登录到GitLab,并将SSH密钥添加到我的个人资料中。目前为止,一切都很好。然而,当我尝试推送或拉取新的示例存储库时,我收到以下消息:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我已经删除了本地的SSH配置文件以防止干扰。我是否需要设置某种类型的SSH隧道?我错过了什么吗?
更新:清除本地的~/.ssh文件夹并重新生成SSH密钥(我将其添加到GitLab配置文件中)会产生以下错误:
Received disconnect from {GITLAB_IP_ADDRESS}: 2: Too many authentication failures for git
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

更新2: 看起来GitLab可能已经有了解决方案:运行 sudo gitlab-ctl reconfigure。请参见这里:https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#git-ssh-access-stops-working-on-selinux-enabled-systems


你是否运行了 ssh-keygen -t rsa 命令,并将 id_rsa.pub 文件复制到你的 GitLab 个人资料中?然后,以正确的访问权限将自己添加到项目中,以便拉取/推送代码? - ʰᵈˑ
是的。我已经重新生成了SSH密钥,并清除了本地的~/.ssh文件夹以确保安全。 - Marty Penner
当您进行拉取/推送操作时,您输入的是哪个密码?是您使用密钥创建的密码,还是您服务器用户密码? - ʰᵈˑ
它甚至不会要求密码,无论我使用有密码还是没有密码的密钥。 - Marty Penner
从您的“known_hosts”文件中清除主机,然后再试一次? - ʰᵈˑ
3个回答

8

您需要创建一个SSH隧道来与GitLab通信。

1. 以您的用户身份登录到开发服务器,并创建一个密钥。

ssh-keygen -t rsa

按照以下步骤创建一个密码(要记住),因为您需要使用该密码来从GitLab拉取和推送代码。

2. 现在,您已经创建了自己的密钥,我们可以将其复制;

cat id_rsa.pub

复制该命令的输出(包括ssh-rsa),并将其添加到您的GitLab个人资料中。(http://my-gitlab-server.com/profile/keys/new)。

3. 确保您具有正确的项目权限

确保您至少是开发者角色。(角色截图:http://i.stack.imgur.com/DSSvl.jpg

4. 现在,复制项目链接

进入您的项目,并在右上角找到SSH链接;

enter image description here

5. 现在回到您的开发服务器

导航到您想要工作的目录,并运行以下命令;

$ git init
$ git remote add origin <<project_url>>
$ git fetch

其中<<project_url>>是我们在第4步中复制的链接。

系统会提示您输入密码(这是您的ssh密钥密码,而不是服务器密码),并将主机添加到known_hosts文件中。之后,项目将开始下载,您可以享受开发乐趣。

我在使用Digital Ocean的CentOS 6.4机器上执行了这些步骤。但是,在使用Google CE时,它们不应该有所不同。

编辑

引用自Marty Penner回答,根据此评论

问题已解决!感谢@sxleixer和@Alexander Wenzowski的发现。

显然,SELinux干扰了.ssh目录的非标准位置。我需要在Compute Engine实例上运行以下命令:

sudo yum -y install policycoreutils-python # Install the `semanage` tool
sudo semanage fcontext -a -t ssh_home_t "/var/opt/gitlab/.ssh/authorized_keys" # Allow the nonstandard ssh_home_t

点击此处查看完整的讨论:

谷歌云引擎。Permission denied (publickey,gssapi-keyex,gssapi-with-mic)


好问题。我不知道是否有这样的冷却期,但也许离开一天是适当的。 - Marty Penner
完成。问题仍然存在。很奇怪。 - Marty Penner
有点奇怪。如果你愿意,可以加我Skype(仅限即时通讯),今晚我可以尝试帮助你更多?(Skype:harry.sniko) - ʰᵈˑ
你太棒了。那很好,但不幸的是,我周末要离开,今天下午带着有限的带宽。如果这个问题在周一之前没有得到解答,你可以在那时候聊天吗? - Marty Penner
感谢您的所有帮助。您清晰地定义了该过程。如果您添加下面我的答案中的命令,我将标记您的答案为正确和完整。 - Marty Penner
显示剩余4条评论

3

我解决了!感谢@sxleixer@Alexander Wenzowski找出了问题所在。

显然,SELinux干扰了非标准位置的.ssh目录。我需要在Compute Engine实例上运行以下命令:

sudo yum -y install policycoreutils-python # Install the `semanage` tool
sudo semanage fcontext -a -t ssh_home_t "/var/opt/gitlab/.ssh/authorized_keys" # Allow the nonstandard ssh_home_t

查看完整的讨论主题,请点击此处:

Google Cloud Engine. Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

更新: 看起来GitLab可能已经有了解决方案:运行sudo gitlab-ctl reconfigure。请参见此处:https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#git-ssh-access-stops-working-on-selinux-enabled-systems


太棒了!很高兴你能解决它。抱歉,我没能抽出时间去尝试。 - ʰᵈˑ

0
在我的情况下,git用户没有完全设置。如果您在日志文件中收到“由于帐户被锁定而不允许使用用户git”之类的消息(在Centos或Redhat下是/var/log/secure),那么您只需要通过“passwd -d git”激活该用户即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接