我已经成功地在服务器(比如)10.107.105.13
上创建了gitolite-admin.git
存储库。我可以通过发出git clone gitolite@10.107.105.13:gitolite-admin
来10.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