GitLab需要git@localhost的密码才能推送到仓库。

16

我正在尝试在我的服务器上运行GitLab。 我按照gitlab github页面上的安装说明进行了操作,一切都很顺利。

问题是当我创建一个代码库并尝试

sudo git push -u origin master

我被提示输入 'git@localhost's password: '

由于git用户没有密码,所以这是一个问题。

其他遇到此问题的人建议将git添加到我的sshd配置文件的AllowedUsers中,但我在那里没有找到AllowedUsers字段,所以这似乎不是问题。

我对ssh的了解还很浅,因此我认为这是某种ssh密钥问题,尽管我尝试将所有相关的ssh密钥添加到/home/git/.ssh/authorized_keys中,并验证文件中没有换行符。

仅供参考,我的安装完全通过了gitlab wiki提供的测试:

sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production
任何建议都将不胜感激!
编辑
所以,我最终通过从另一台机器提交到存储库来解决了这个问题。事实上,我是通过SSH连接到运行gitlab的同一台机器的。当我尝试从主机以外的机器提交时,它完美地工作了。因此,这可能是某些人的解决方案(对我们来说是这样,因为我们在与服务器不同的机器上开发)。对于任何试图在同一台计算机上托管和开发且遇到此问题的人来说,这仍然是一个未解决的问题。

新问题是https://dev59.com/WWUp5IYBdhLWcg3wHk2o - Paul Verest
在使用 git push 命令时,不应该使用 sudo - StenSoft
15个回答

4

TL;DR

密钥存储在GitLab数据库和Gitolite端上。 您应该使用预置的gitolite-admin.git文件夹,而不是使用您的备份! 之后使用update keys命令重新构建Gitolite的密钥。 (将已保存在GitLab数据库中的密钥更新到Gitolite中)

sudo -u gitlab -H bundle exec rake gitlab:gitolite:update_keys RAILS_ENV=production

很可能是由于gitolite密钥没有正确保存导致的问题。这些用于登录的密钥实际上是由gitlab和gitolite分别保留的。对于拉取/推送,实际上使用的是保存在gitolite内部的密钥。(git/repositories/gitolite-admin.git/index, git/.gitolite/keydir, git/.ssh/authorized_keys)
通常情况下,gitlab应该会帮助将这些导入的密钥保存到gitolite文件中。但是由于某些原因,它失败了。由于密钥没有正确保存在gitolite中,客户端/服务器无法使用密钥并回退到密码验证。
您需要检查和修复保存在gitolite中的这些密钥以解决问题。
更多信息请参见此处

2

我遇到了同样的密码提示问题。我的问题在于我只允许几个用户使用ssh。我将git用户添加到sshd_config的AllowUsers列表中,一切都很顺利。


2
如果安装成功,那么您的Gitlab应能够无问题地克隆gitolite-admin存储库。
但您说它通过了状态检查,这意味着您正在使用名为“gitlab”的帐户进行ssh连接。
这也意味着任何客户端都必须使用相同的帐户“gitlab”而不是“git”进行ssh。
因此,如果您的ssh密钥已通过Gitlab界面添加,则可以将其git clone/git push到具有地址“gitlab@server”的远程名称origin。
要进行更多调试,请查看“设置Git远程SSH(git-upload-pack / git-receive-pack)”中提到的一些其他提示:
如果您无法在本地推送(即在服务器本身上,即在'localhost'上),请至少尝试:
ssh -vvvT gitlab@localhost

不需要任何密码,因为/home/gitlab/.ssh/id_rsa/home/gitlab/.ssh/id_rsa.pub都已存在。


嗨VonC,感谢您在这里的帮助。只是为了验证,我已经通过一个不同于gitlab的帐户(用户名为devin)SSH登录到服务器机器上。 不幸的是,ssh -vvvT gitlab@localhost需要密码。 我还没有尝试通过界面添加密钥,因为我还没有在gitlab上注意到这个选项。如果您有任何进一步的建议,请告诉我。 谢谢! - DevinR
@DevinR 如果您在未添加公钥的情况下尝试使用ssh,那么ssh要求输入密码是很正常的:它会在~gitlab/.ssh/authorized_keys中查找您的公钥,但找不到。您需要生成公钥/私钥(如http://stackoverflow.com/a/10921120/6309中所述),并将公钥复制到您的gitlab帐户页面中。 - VonC
我已在GitLab上生成了一个用户,并添加了我的SSH密钥。我还将该密钥添加到/home/gitlab/.ssh/authorized_keys和/home/git/.ssh/authorized_keys中。不幸的是,我仍然遇到同样的问题。再次感谢您的帮助。 - DevinR
@DevinR,你不需要将任何内容添加到gitlab的authorized_keys文件中:这是gitolite的工作,在通过界面添加公钥时由gitlab调用。有一件事让我困扰,那就是缺少一个~gitlab/.gitconfig文件,它是gitlab的全局git配置。请尝试在服务器上以gitlab身份输入以下命令:git config --global user.name gitlabgit config user.email gitlab@mail.com(实际电子邮件地址并不重要):这将避免gitolite在执行操作时因缺少标识(没有用户名,没有电子邮件)而出错。然后再尝试添加新的密钥。 - VonC
很好,使用冗长标志(-vvv),我能够看到ssh程序无法读取私钥文件..带有消息: 无法打开密钥文件'/home/XxX/.ssh/id_rsa':权限被拒绝。 - imme
@immeëmosol 是的,这就是我调试ssh连接的方式。但我通常会从 ssh -Tv 开始(稍微减少冗长输出),如果需要的话再加上一两个 'v'。 - VonC

1
我最近遇到了同样的问题,发现我的问题是SELinux阻止了sshd访问gitlab数据目录/var/opt/gitlab/中的authorized_keys文件。
为了解决这个问题,请编辑/etc/selinux/targeted/contexts/files/file_contexts.homedirs并添加以下行:
/var/opt/gitlab/\.ssh/.*    system_u:object_r:ssh_home_t:s0

然后运行:
$ restorecon -Rv /var/opt/gitlab

来源:https://serverfault.com/questions/50573/selinux-preventing-passwordless-ssh-login

SELinux是一个安全增强的Linux内核模块,它可以限制进程的权限,以防止未经授权的操作。如果你试图通过SSH实现无密码登录,并且遇到了SELinux的问题,则需要修改SELinux上下文或配置SELinux策略,以允许SSH密钥验证。您可以通过编辑/etc/ssh/sshd_config文件和SELinux上下文设置来修复这个问题。


1
最近我经常遇到这种情况 - 在工作项目中,git会要求我输入我的电子邮件和密码。虽然输入后可以继续进行,但这很烦人。
对于我有权限访问的任何应用程序,我都可以通过以下方式解决此问题:
git config remote.origin.url git@github.com:user_org_or_co/repo_name_itself

例如

git config remote.origin.url git@github.com:smithw/bookmarkapp

1

确保您的GitLab个人资料中有您的公共SSH密钥。登录GitLab,进入您的个人资料,选择“添加公共密钥”按钮。将您的“keyfile”.pub内容复制并粘贴到“Key”框中。某些版本的GitLab存在一个错误,即当您添加公共密钥时,它不会更新authorized_keys文件。在将其添加到您的个人资料后,请验证(但不要手动添加)您的公共密钥是否在authorized_keys文件中。如果这不是问题所在,那么也许之前的答案之一可以帮助您。


1
在git服务器上编辑/etc/ssh/sshd_config 取消身份验证部分下面的以下行或添加它们: PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys 给你的服务器一个电源循环,然后启动GitLab。

1
“给你的服务器断电重启”似乎有些过度了——只需重新启动sshd即可。 - kara deniz

0

对于任何遇到 Bitnami 或其他配置问题的人,如果想快速解决,只需使用完整路径即可。

git clone git@server_adress:/full/path/to/project.git

编辑: 我忘记提到了,非常重要的一点是要检查您是否通过网页将SSH密钥添加到git-lab中。


这看起来很有前途,但现在仍然要求输入服务器地址的密码。 - pal4life

0

这里有一个链接可以查看这里的票。

要确定问题的原因,请通过sudo grep sshd /var/log/auth.log在服务器上检查日志。

直到2013年12月13日提交的b24d5d,由于对.ssh/的权限过高,Vagrant开发机上出现了这个问题。您必须具备:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

或者ssh拒绝建立RSA连接,sudo grep sshd /var/log/auth.log显示:

Authentication refused: bad ownership or modes for file /home/git/.ssh/authorized_keys    

问题已经通过将sshd设置为非严格模式来解决,允许它在开发中正确运行,即使权限过于自由也可以。

0

这意味着gitlab的ssh服务器没有正确配置。

编辑/etc/ssh/sshd_config并确保:

PasswordAuthentication no
ChallengeResponseAuthentication no

这应该强制使用ssh密钥登录,这也是一个很好的安全措施。许多较新的发行版已经默认启用了此功能。

如果你被锁在外面,请不要问我,显然SO不是询问如何配置和使用私钥/公钥对的地方。


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