【问题标题】:Git Server Frustration (Gitosis, Gitolite, etc)Git 服务器受挫(Gitosis、Gitolite 等)
【发布时间】:2011-04-09 19:54:02
【问题描述】:

请原谅令人沮丧的暗示,因为我多次尝试正确设置但无济于事(可能而且很可能是由于我的无知,也可能是由于缺乏详尽和简洁的文档)。

我正在尝试设置一个 git 服务器,以便我可以在一小群开发人员之间共享代码。每个开发人员都可以从多个客户端 PC 进行连接。我过去来自 MS,所以我对开发工具集有点宠坏了,但如果我能得到类似于 TFS 的东西,那就太棒了。

当尝试设置 gitosis(我知道这对于 git 社区每个https://serverfault.com/questions/225495/ubuntu-server-gitosis-user-naming-convention 已弃用)或 gitolite 时,似乎一旦我设置它我就必须非常小心,因为似乎一切都是用牙签保持平衡。

我最近尝试设置一个 git 服务器包括将我的公钥 (benny.pub) 从我的笔记本电脑移动到服务器,使用该公钥设置所有内容并拉下配置以设置 repo 和权限。然后我意识到我想在另一台 PC 上开发,所以我创建了一个新密钥 (benny@desktop.pub) 并将 benny.pub 重命名为 benny@laptop.pub,这显然把事情搞砸了。这就是我知道我通过更改名称而变得愚蠢的地方。

经过冗长的描述后,我的问题是:如何建立一个坚固的自托管 git 服务器,让多个开发人员从多台机器登录,同时保持安全等?必须有一种经过验证的技术(gitolite 可能描述了 4-5 种不同的方式......也令人沮丧)来做到这一点,因为我确信我不是唯一一个试图做同样事情的人。也许 git 不适合我的团队?

非常感谢任何帮助!

【问题讨论】:

  • 使用 gitolite,使用“来自客户端的方法”:stackoverflow.com/questions/5041067/gitolite-git-clone-error/…。像魅力一样工作。
  • 另外,在我看来,在笔记本电脑和台式机等系统之间共享 SSH 密钥并不是一件可怕的事情。只要每一个都是安全的,最重要的是密钥有密码。

标签: linux git gitosis gitolite


【解决方案1】:

根据我的经验,您所需要的只是一个具有单个 git 帐户/登录名的 SSH 服务器,您可以使用您的一个公钥连接到该服务器。使用 SSH 安装 gitolite(将 gitloite 从您的客户端复制到服务器并进行基本设置)并让您的开发人员向您发送他们的公钥。将这些密钥添加到 ~ 中的 gitolite-admin 存储库并推送。

为什么开发人员首先需要多个密钥对,即使使用多台机器?这种情况既不会影响 SSH 处理身份验证的方式,也不会影响 gitolite 处理授权的方式:它们仍然是 SSH 密钥。

  • 如果开发人员必须使用多个密钥对(一个用于 git,另一个用于其他服务器),让他们处理复杂性并建议他们在 ~/.ssh/config 中为他们使用的每个密钥对/服务器组合创建一个条目.

  • 如果开发人员在使用的每台机器上都有不同的密钥对,gitolite 组可以组合多个公钥:

@agross = agross-1 agross-2

【讨论】:

  • 不再有通过 ssh 安装 gitolite 的选项。我为 gitolite + GitLab 推荐这篇文章(gitolite 的 UI 不错):blog.phusion.nl/2012/04/21/… 请注意,这是针对 Debian,但在其他系统上应该类似
  • @glebm “不再有通过 ssh 安装 gitolite 的选项”是什么意思?这是默认协议。
  • @webXL 他说的是安装,而不是安装后访问 Git 服务器。截至今天,Gitolite 不提供通过 SSH 安装的方法。不过,您可以自己通过 SSH 连接到您的服务器。
【解决方案2】:

几点建议:

Scott Chacon 的 pro git 书中关于服务器上 git 的部分

Gitorious 是开源软件

【讨论】:

    【解决方案3】:

    我在工作中维护一个 gitosis 配置,当开发人员有多个 ssh 密钥时,我所要做的就是将所有这些密钥放在同一个 keydir/user.pub 文件中。

    因此,将您的所有密钥连接到 keydir/benny.pub,您应该已经准备就绪。

    【讨论】:

    • 我不明白这是怎么回事。当我尝试这样做时,它写道:“警告:pubkey 文件只能有一行(密钥);忽略 user.pub”。所以不,它不能工作。
    • 您使用的是 gitolite 还是 gitosis?我的回答只针对 gitosis,这是我们在工作中使用的。 (Gitolite 的工作方式不同,需要在不同的文件中有多个密钥。)
    【解决方案4】:

    有一些带有基于 Web 的 UI 的开源 git 托管解决方案,用于创建存储库和添加用户(例如 GitHub:FI)...虽然我不知道限制访问:

    HTH

    【讨论】:

      【解决方案5】:

      我正在使用 debian,每个开发人员在服务器上都有一个帐户。我使用带有私钥登录的 ssh。最后,开发人员必须使用 ssh://username@example.com/git-repo/repo.git 之类的 url 来结帐或在任何情况下与 repo 上的 git 交互

      【讨论】:

      • 您不需要为每个开发人员登录。 SSH/gitolite 可以处理单个 git@server 登录背后的多个人,所有这些人都由他们自己的 SSH 公钥标识。
      • @Alexander,你能描述一下如何吗?
      • @Benny 这很简单:SSH 只做身份验证,gitolite 只处理授权和 git 协议。开发者的公钥在git 用户的~/.ssh/autorized_keys 中注册。 SSH 将授权/允许开发人员使用git 帐户登录。 ~/.ssh/autorized_keys 还包含要运行的“shell”,即以用户名为参数的gitolite 的主脚本。该脚本包含授权部分(它读取 gitolite 的配置文件)并且还将处理 repo 访问。
      【解决方案6】:

      我认为问题在于您的 ssh 客户端(windows 或 linux 版本)没有找到密钥文件。我有同样的问题并以这种方式解决:

      • 在我的笔记本中,在 ~/.ssh 文件夹中生成了密钥文件 (rafael.nicoletti@mycorporation)(其中 ~ 是主文件夹。windows 版本是 %HOME% env)
      • 我在 ~/.ssh 中添加了一个文件名配置,内容如下:

        IdentityFile ~/.ssh/rafael.nicoletti@corporation

      在我想访问我的 git 服务器的每个位置,我只需将这些文件复制到我的 %HOME% 文件夹中

      你也可以把这样的东西放在配置文件中:

      IdentityFile /d/identity.key
      IdentityFile /e/identity.key
      IdentityFile /f/identity.key
      IdentityFile /.../identity.key
      

      因此配置将在可移动媒体中查找密钥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多