用户无法连接到git(在Ubuntu上使用gitolite)

我成功运行了以下命令:
git clone admin@ip address:gitolite-admin.git
当我尝试按照以下步骤添加新用户时,新用户无法连接: 迄今为止已采取的步骤:
1.  Copied the public key into the keydir (also tried copying it in a separate directory within the keydir)
2.  I added a repo in the config file for the new userID
3.  git add -A
4.  git commit -m 'adding new user keys and repo'
5.  git push origin master
所有这些命令都可以顺利运行,没有抛出任何错误。
当用户尝试登录时,他无法通过以下命令连接。
git clone username@IPAddress:newRepoName.git
连接超时,报告无法在端口22上进行连接。有什么建议可以帮助排除故障吗(用户的公钥是从他的计算机生成的 - 用于登录的是同一台计算机 - 用于管理员访问的是另一台计算机)。提前感谢。 编辑: 我删除了一个(非管理员)用户的公钥,在提交后将其推送到服务器,然后为该用户添加了一个新的公钥,在添加、提交和推送到服务器之后。管理员的回复中提到已添加该用户。然而,当用户尝试使用以下命令连接服务器时,连接尝试失败(我可以从我的计算机克隆项目 - 其他用户和附加用户都不能,所以我猜我在配置附加用户时犯了一个错误 - 如果有任何想法,欢迎分享,并感谢您的耐心)。 git clone git@xx.xxx.xxx.xx:testProject 正在克隆到 'testProject'... 权限被拒绝(publickey)。 fatal: 远程端意外挂断。

新用户可能在他们的计算机上有多个密钥(用于两个独立的git实例)- 检查是否是这个问题。 - ali haider
用户名?ssh到gitolite服务器时,您总是使用相同的帐户。实际用户的验证将通过与在gitolite端的~/.ssh/authorized_keys文件中注册的公钥进行匹配来完成。 - VonC
我实际上之前也尝试过这种方法,但它无法连接(报错“权限被拒绝(公钥)”)。如果有其他建议,我非常乐意听取。谢谢您之前的反馈。 - ali haider
我尝试通过添加命令再次添加公钥,但似乎并没有解决这个问题。 - ali haider
3个回答

这个地址永远不会起作用:git clone username@IPAddress:newRepoName.git 在使用gitolite时,您始终使用相同的帐户:
git clone git@IPAddress:newRepoName.git
(如果git是安装gitolite的账户) 参考"添加和删除用户"了解如何声明一个新用户: 也就是在gitolite.conf文件中,添加以用户id命名的公钥。 然后用户必须把他/她的密钥放在~/.ssh/id_rsa(.pub)中,并使用git@IPAddress:newRepoName.git(不是username)来执行任何git命令。

非常感谢您的反馈。这是我在发布问题之前尝试过的方法:(1)让新用户在他们的计算机上创建密钥(2)让他们将其复制到他们的~/.ssh目录,并确保他们可以无需密码连接(3)将密钥复制到keydir中的一个目录中(我甚至尝试直接将其复制到keydir中)(4)在gitolite.conf文件中添加一个允许新用户和管理员的仓库(5)运行我在原始帖子中列出的命令。 - ali haider
然而,新用户仍然无法连接(使用git clone git@ip地址:repoName.git(我尝试过用户名和git@,所以我猜那不是问题所在)。如果有其他有用的建议,将不胜感激。非常感谢迄今为止的反馈。 - ali haider
我可以从我的管理员电脑克隆代码库。 - ali haider
@alihaider(2)我确认用户不应该能够通过ssh登录(gitolite应该立即拦截),所以你不需要进行那个测试:太早了。(3)它必须直接复制到gitolite-admin库的keydir目录中,以用户ID命名,如http://sitaramc.github.com/gitolite/users.html中所述。别忘了将`gitolite-admin`库推送回服务器。 - VonC
@alihaider,你总是使用 git@,绝对不要使用 username@。请参考此链接了解为什么要使用这种方式:http://stackoverflow.com/questions/13318715/how-do-programs-like-gitolite-work/13320256#13320256 - VonC
非常感谢您耐心回答并分享您的意见。正如我之前提到的,我已经尝试过使用git@而不是username@,只有这样我才能够成功连接。我也尝试过直接将密钥移动到keydir中(而不是放在keydir的子目录中),我将尝试先移除用户,然后再添加一次,看看是否可以解决问题。谢谢。 - ali haider
根据我在帖子中的编辑,我重新创建了用户,但它确实连接上了(我可以在我的电脑上拉取存储库)。新用户的公钥已经在服务器上。 - ali haider
+1 分享信息 - 我还是无法让用户连接(用户在 gitolite.conf 文件中配置,并且他们的公钥在 keydir 中 - 之后我运行了 git add/commit/push。谢谢。 - ali haider

问题出在客户端设置上,用于连接托管 git 的亚马逊 AWS 实例。我接受了 VonC 的回复,因为他对我所有的问题都非常敏感。谢谢。

  1. 我让用户通过 SSH 连接(使用 SSH 证书文件),用户接受了连接到他们电脑的密钥。
  2. 用户在其 ~./ssh 文件中添加了一个配置文件,格式如下:

    Host test.git.com

    HostName amazonHostName

    User adavid

    PreferredAuthentications publickey

    IdentityFile ~./ssh/adavid

用户还运行了 ssh-add 命令。然而,他们无法使用短名称连接到 git 存储库,而必须使用长名称进行连接。

再次感谢 VonC!


我没有立即看到你的反馈。好的反馈,完善了我的回答。+1 - VonC

对于其他遇到同样问题的人,请检查服务器上是否使用了AllowGroups来进行ssh。可能是服务器上的git用户不在正确的组中。 诊断:尝试通过ssh连接到服务器上的git用户,并查看/var/log/auth.log中出现了什么。如果显示“User git from not allowed because none of user's groups are listed in AllowGroups”,则需要检查AllowGroups中包含哪些组,然后将git用户添加到其中一个组中。