使用Gitolite时,系统会要求用户输入密码



我已经成功地在服务器(比如)10.107.105.13上创建了gitolite-admin.git存储库。我可以通过发出git clone gitolite@10.107.105.13:gitolite-admin10.14.42.7本地机器(例如)克隆此存储库。我不得不.ssh/config文件中添加一些行以确保使用正确的私钥。

然后,我将用户dilawar添加到conf/gitolite.conf文件,并在文件夹中添加适当的密钥dilawar.pub keys。我已将此提交添加并提交到gitolite-admin存储库中。我还.ssh/conf文件中又添加了一个条目,以便使用正确的私钥。但是当我尝试做git clone dilawar@10.107.105.13:testing时,吉托利特要求输入密码。我的印象是我不必在 10.107.105.13 上创建用户 dilawar。我已经通过登录服务器检查了存储库 testing.git 是否存在,并且公钥dilawar.pub已添加到.ssh/authorized_keys中。

我还尝试ssh -vvvv dilawar@10.107.105.13检查是否提供了正确的文件。这是我.ssh/conf文件。

HostName 10.107.105.13 
    User gitolite
    IdentityFile ~/.ssh/gitolite
Host 10.107.105.13
    HostName 10.107.105.13 
    User dilawar 
    IdentityFile ~/.ssh/id_rsa

我做错了什么?

在您的配置文件中,我看到:

User dilawar

这是错误的。 与 gitolite 服务器的 SSH 通信始终使用相同的帐户完成(此处gitolite )。
使用的私人密钥有哪些变化,这将有助于 gitolite 确定您的身份。

~/.ssh/config文件应如下所示:

Host admin
    HostName 10.107.105.13 
    User gitolite
    IdentityFile ~/.ssh/gitolite
Host dilawar
    HostName 10.107.105.13 
    User gitolite
    IdentityFile ~/.ssh/id_rsa

对于克隆gitolite-admin,您将使用:

git clone admin:gitolite-admin

对于克隆存储库,dilawar有权访问:

git clone dilawar:aRepo

更多信息请参阅"Gitolite:添加用户不起作用,并且在克隆为root时被fallthru拒绝?
另请参阅"吉托石如何使用 ssh"

将公钥添加到服务器的~git/.ssh/authorized_keys文件中是 ssh 使用公共密钥对用户进行身份验证的方式。
假设sita@work.station正在尝试以git@server身份登录。
您所要做的就是获取工作站上用户sita~sita/.ssh/id_rsa.pub文件,并将其内容(记住它只有一行)附加到服务器上的用户git ~git/.ssh/authorized_keys

authorized_keys文件可以添加多个公钥(来自许多不同的人),以便其中任何一个都可以登录到git@server

我通过使用 gitolite 用户名克隆存储库来让它工作。

git clone gitolite@server:repo 

如果成功添加键,则进一步的拉动和推动将顺利进行。

我接受 VomC 答案作为更好的答案。

VonC 的答案是关键,但我遇到了一个值得未来搜索者提及的边缘情况。

即使你做对了其他所有事情,就像VonC的回答一样,ControlPath的某种标准设置也会把事情搞砸。

我在~/.ssh/config有两个用户,如下所示:

Host gitolite
    HostName <whatever> 
    User git
    IdentityFile ~/.ssh/gitolite
Host username
    HostName <whatever> 
    User git
    IdentityFile ~/.ssh/username

从理论上讲,这应该允许我运行git clone git@username:reponame,但服务器一直认为我试图以 gitolite 管理员(无权克隆该存储库)而不是 gitolite 用户(

有权克隆存储库)克隆存储库。

问题是在我的所有主机部分中,我有以下内容:

Hosts *
    # other stuff that doesn't matter
    ControlPath ~/.ssh/ssh-%r@%h:%p

如果你没有马上看到它(我没有!),问题是%r@%h%p(= username@hostname:port)的扩展对于吉托石和用户名条目是相同的。他们都git@hostname:port!一旦我意识到这一点,这很容易解决。只需将区分元素添加到这两个用户的更具体的ControlPath条目中即可。例如,

Host gitolite
    HostName <whatever> 
    User git
    IdentityFile ~/.ssh/gitolite
    ControlPath ~/.ssh/gitolite-admin-%r@%h:%p
Host username
    HostName <whatever> 
    User git
    IdentityFile ~/.ssh/username
    ControlPath ~/.ssh/gitolite-username-%r@%h:%p

我必须编辑/etc/ssh/sshd_config并将git(用户)添加到以AllowUsers开头的行中。然后我不得不将 git 添加到一个系统管理员组中,该组也允许在以 AllowGroups 开头的行sshd_config 上。

不要忘记使用 sudo service ssh restart 重新启动 ssh 守护进程。

注意:我不必像之前建议的那样ssh-copy-id或将公钥添加到/home/git/.ssh/authorized_keys(顺便说一句,gitolite的开发人员建议不要这样做。

由于我的配置,我遇到了同样的问题,有不同的解决方案。我将我的 gitolite 用户设置为"git",所以我需要做git clone git@server:repo.git

最新更新