2012-02-18 50 views
4

我使用this tutorial在我的服务器上安装了gitolite。这属于“非根”方法。gitolite:可以通过SSH连接,不能克隆

当我试图将gitolite-admin克隆回我的客户端时,它失败。我得到这个错误信息:

git clone [email protected]:gitolite-admin 
Cloning into gitolite-admin... 
fatal: The remote end hung up unexpectedly 

另外:

git clone ssh://[email protected]:gitolite-admin 
Cloning into gitolite0admin... 
Using username "git-upload-pack 'gitolite". 
fatal: The remote end hung up unexpectedly 

我也试图附加.git到回购名字的结束,我也尝试添加repositories/gitolite-admin(在错误提示上面链接的教程)以及这两者的组合并且都不起作用。我可以在谷歌上找到关于“使用用户名”位的结果,这让我很感兴趣。

我可以通过SSH连接到机器,它告诉我,我有权访问R和W gitolite-admin。那么,SSH正在工作?

回答

7

查看SSH parts about gitolite:事实上,你可以通过ssh连接到server.com仅仅意味着:

  • 您的SSH密钥注册在[email protected]~/.ssh/authorized_keys
  • 该密钥是不相关的gitolite“不存在“command=”选项,这意味着“不管传入用户要求做什么,而是强制运行该命令”)。
    您处于交互式会话中,能够执行任何您喜欢的命令。

我不喜欢所有关于第三方教程是什么,它试图使用相同名称的git用户和ssh非root用户

你应该保持独立

  • 非根用户这不是一个帐户,只是一个ssh密钥,这将被链接到gitolite,具有管理员权限到t他gitolite-admin回购)
  • 托管帐户,这应该是 'git',不gitolite,正是为了避免两种使用模式之间的困惑:在server.com,没有SSH
    • git日志上直接这里):执行git的命令(如克隆服务器的gitolite回购,并执行gitolite/src/gl-system-install)所需的交互会话
    • ssh [email protected]将使用你的公共区域~/.ssh/id_rsa(.pub) IC和私钥,其中,作为gitolite的那些,将授权你克隆gitolite-admin回购和推回该回购

还是那句话:
“gitolite”是不是一个真正的帐户,只有被授权在server.com上执行命令的名称为'git'(实际的“托管帐户”,如“托管git服务和回购”)。
所有其他的git用户也将在server.com上执行git命令作为git
并且该特定用户(gitolite)将被链接通过forced-command mechanism的gitolite安装过程中,以授予该“用户”的权利来克隆,修改和推回gitolite-admin回购到gitolite授权层,使用权限的设置。
(这是它唯一的特殊性,相比于其他所有SSH git的用户,您将添加:他们将无法访问特定的git回购这是gitolite-admin之一)

试图命名两个具有相同名称只是要求麻烦。

我不喜欢使用默认命名约定的公共/私有密钥,所以我更喜欢客户端定义与预期用户的名称这些键上:

~/.ssh/gitolite.pub 
~/.ssh/gitolite 

然后我定义了配置文件:~/.ssh/config在它:

host gitolite 
    user git 
    hostname server.com 
    identityfile ~/.ssh/gitolite 

(这里要注意的用户:总是git
然后我可以复制我的gitolite-amin回购:

git clone gitolite:gitolite-admin 
# modify locally 
# git add -A ; git commit -m "my modifs" 
git push origin master 
+0

我正在使用的服务器没有任何用户使用密钥对授权进行登录,因此我使用的密钥尚未添加到任何人的〜/ .ssh/authorized_keys中。现在,我添加到服务器gitolite中的用户,如'useradd gitolite',确实有一个〜/ .ssh/authorized_keys,在那个文件中,我找到了我的公钥,我的gitolite用户名(steve),还有一个命令部分。此外,使用gitolite用户连接到我的服务器不是一个交互式会话。它告诉我什么是可用的回购,然后立即注销。 – steve 2012-02-18 18:11:45

+0

@steve:那么看起来不错。你可以尝试在客户端定义一个〜/ .ssh/config文件,并尝试使用'git clone gitolite:gitolite-admin'? (只是'用户gitolite'替换用户的Git,尽管我仍然觉得不安考虑'gitolite'作为一个帐户) – VonC 2012-02-18 18:48:26

+0

OK - 这里的线从我的〜/ .ssh/config中 主机server.com \t用户gitolite \t主机名server.com \t PreferredAuthentications公钥 \t IdentityFile“C:\用户\用户名\的.ssh \ id_rsa” < - 这个键对应服务器上的公共密钥,即使它有一个不同的名称。 我不完全确定你的意思是'git clone gitolite:gitolite-admin',但是我运行它并且我得到了主机不存在,无法打开连接。 那么,我从上面运行相同的命令,我仍然得到相同的错误。 – steve 2012-02-19 18:41:13

1

对于后人,修复方法是确保GIT_SSH是而不是设置为TortoisePlink.exe。 Git不能使用它。