【问题标题】:gitolite: can connect via ssh, can't clonegitolite:可以通过 ssh 连接,不能克隆
【发布时间】:2012-03-09 12:04:55
【问题描述】:

我使用this tutorial 在我的服务器上安装了 gitolite。这属于“非root”方法。

当我尝试将 gitolite-admin 克隆回我的客户端时失败。我收到此错误消息:

git clone gitolite@server.com:gitolite-admin
Cloning into gitolite-admin...
fatal: The remote end hung up unexpectedly

还有:

git clone ssh://gitolite@server.com: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 工作正常吗?

【问题讨论】:

    标签: git ssh gitolite


    【解决方案1】:

    检查ssh parts about gitolite:您可以通过ssh 连接到server.com 仅意味着:

    • 您的 ssh 密钥已在 server.com@~/.ssh/authorized_keys 中注册
    • 该键与 gitolite 无关'没有“command=”选项,这意味着“无论传入用户要求做什么,都强制运行此命令”)。
      您处于交互式会话中,能够执行您喜欢的任何命令。

    我不喜欢第三方教程的一点是它尝试使用 git 用户和 ssh 非 root 用户的相同名称

    你应该分开

    • 非root用户不是帐户,只是一个ssh密钥,将链接到gitolite,具有gitolite-admin repo的管理员权限)
    • 主机账户,应该是'git',而不是gitolite,正是为了避免混淆两种使用模式
      • git直接登录server.com,这里没有ssh):执行git命令需要交互式会话(比如在服务器上克隆gitolite repo,并执行gitolite/src/gl-system-install
      • ssh git@server.com 将使用您的 ~/.ssh/id_rsa(.pub) 公钥和私钥,它们是 gitolite 的,将授权您克隆 gitolite-admin 存储库并推回该存储库

    再次声明:
    'gitolite' 不是真正的帐户,只是一个被授权在 server.com 上执行命令的名称,即 'git'(实际的“托管帐户”,如“托管 git 服务和存储库”)。
    所有其他 git 用户也将在 server.com 上以 git 执行 git 命令。
    该特定用户 (gitolite) 将通过 forced-command mechanism 链接到 gitolite 授权层,并设置权限在 gitolite 安装期间,为了授予该“用户”克隆、修改和推回gitolite-admin repo 的权限。
    (与您将添加的所有其他 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 repo:

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

    【讨论】:

    • 我使用的服务器没有任何用户使用密钥对授权登录,因此我使用的密钥尚未添加到任何人的 ~/.ssh/authorized_keys。现在,我添加到服务器的用户 gitolite,如 useradd gitolite,确实有一个 ~/.ssh/authorized_keys,在该文件中,我找到了我的公钥,我的 gitolite 用户名 (steve),并且有一个命令部分。此外,使用 gitolite 用户连接到我的服务器不是交互式会话。它告诉我有哪些可用的存储库,然后立即将我注销。
    • @steve:那么看起来不错。您可以尝试在您的客户端定义一个 ~/.ssh/config 文件,然后尝试 git clone gitolite:gitolite-admin 吗? (只需将用户 git 替换为 user gitolite,尽管我仍然觉得将 gitolite 视为帐户感到不安)
    • OK - 这是我的 ~/.ssh/config Host server.com User gitolite Hostname server.com PreferredAuthentications publickey IdentityFile "C:\Users\user name\.ssh\id_rsa" git clone gitolite:gitolite-admin 是什么意思,但是我运行了它,发现主机不存在,无法打开连接。然后我从上面运行了相同的命令,我仍然得到同样的错误。
    • @steve:当您在配置文件中声明“主机”时,您就是在声明快捷方式。您可以使用gitolite:...,而不是使用ssh://git@server.com/...,因为主机'gitolite'将对应于具有特定私钥的主机名'server.com'(名称可以是xxx,只要你有它的公钥就在所述私钥旁边,名为“xxx.pub”)。名字并不重要:它不会被传播。只有公钥的内容是。所以不要声明'host server.com',这不是字段主机的用途。这是为了声明一个更容易记住的别名
    • 新信息!我决定看看我还能想出什么,所以我用虚拟机来检查我是否能完成任何事情。我能够为虚拟客户端添加一个用户,并且该用户能够克隆 gitolite 附带的测试存储库。我在我的真实客户端上尝试过,我什至无法克隆它,所以它一定是我机器上的 git 设置有问题。
    【解决方案2】:

    为了后代,修复方法是确保 GIT_SSH 设置为 TortoisePlink.exe。 Git 无法使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2021-11-21
      • 2016-05-07
      • 2013-04-16
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多