8

我已经gitolite-admin.git在服务器(比如说)上成功创建了 repo 10.107.105.13。我可以10.14.42.7通过发出git clone gitolite@10.107.105.13:gitolite-admin. 我必须在文件中添加一些行.ssh/config以确保使用正确的私钥。

然后我添加了一个用户dilawarconf/gitolite.conf文件和一个适当dilawar.pubkeys文件夹键。我已经添加并提交了这个提交到gitolite-adminrepo。我还在.ssh/conf文件中添加了一个条目,以便使用正确的私钥。但是当我尝试这样做时git clone dilawar@10.107.105.13:testing,gitolite 要求输入密码。我的印象是我不必在 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

我做错了什么?

4

5 回答 5

10

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

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

对于克隆 repodilawar可以访问:

git clone dilawar:aRepo

请参阅“ Gitolite:添加用户不起作用,并在克隆为 root 时被 fallthru 拒绝? ”。
另请参阅“ gitolite 如何使用 ssh

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

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

于 2012-06-06T07:19:29.667 回答
4

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

git clone gitolite@server:repo 

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

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

于 2012-06-08T11:36:18.363 回答
1

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 管理员(没有克隆该 repo 的权限)的身份克隆 repo,而不是作为 gitolite 用户(确实有克隆 repo 的权限)。

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

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

如果您没有立即看到它(我没有看到!),问题在于%r@%h%p(= username@hostname:port)的扩展对于gitolite 和 username 条目是相同的。他们都是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
于 2020-05-21T11:01:48.877 回答
0

我必须编辑/etc/ssh/sshd_config并将git(用户)添加到以 . 开头的行中AllowUsers。然后我必须将 git 添加到一个 sysadmin 组,该组也允许在 sshd_config 的以AllowGroups.

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

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

于 2016-01-14T12:20:36.697 回答
0

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

于 2018-02-18T23:01:14.430 回答