如何在Ubuntu12.04VPS上使用Gitolite控制对Git服务器的访问

来自菜鸟教程
跳转至:导航、​搜索

状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


介绍


Git 是一个出色的分布式版本控制系统,可用于跟踪任何类型项目的更改和代码。 有时,配置一个 git 服务器来存放团队的项目会很有帮助。

Gitolite 为 git 服务器提供访问控制层,因此您可以配置基于用户的 git 访问,而无需附带操作系统用户帐户。 这为您的 git 贡献者提供了他们需要的权限,而不会将您的服务器暴露给其他类型的交互。

我们将在 Ubuntu 12.04 VPS 上安装这些组件。 本教程假设您在此 VPS 上拥有一个具有 sudo 权限的普通用户帐户。 如果您需要帮助 在 Ubuntu 上设置用户帐户,请使用本教程。

安装 Git


使用您的常规用户帐户登录到您的 Ubuntu 服务器。

我们将从 Ubuntu 的默认存储库安装 git:

sudo apt-get install git-core

我们现在已经安装了 git。 我们将要配置一些东西以使 git 正常运行。

安装 Gitolite


现在我们已经正确设置了 git,我们可以安装 gitolite 来管理用户对我们存储库的访问。

Gitolite 也可以在 Ubuntu 的默认存储库中使用。 使用以下命令安装它:

sudo apt-get install gitolite

Gitolite 通过 git 管理其配置! 为了正确设置它,我们将创建一个操作系统用户,其唯一功能是与 gitolite 交互。

操作系统用户将被称为 git 以便我们的合作者容易记住。 我们不会设置密码,因此它只能通过使用 su 命令访问。

sudo adduser --system --group --shell /bin/bash --disabled-password git

我们现在有一个名为“git”的用户来处理 gitolite 配置。 我们需要能够从普通帐户访问此用户。 我们将通过配置与 git 管理相关联的 SSH 密钥来做到这一点。

为 Git 管理配置 SSH 密钥


在您将用于管理 git 和 gitolite 的 local 计算机上,如果尚未创建 SSH 密钥对,则需要创建。

注意:如果您已经创建了密钥对,则应跳过此命令以避免覆盖您的 SSH 密钥。

ssh-keygen -t rsa

接受默认位置并按 ENTER 配置无密码的基于密钥的登录。

通过键入以下命令将公钥复制到 git 服务器:

scp ~/.ssh/id_rsa.pub常规用户名@git_server_IP_address : /tmp/git-admin.pub

如果您遵循初始服务器设置文章,您将需要允许 SSH 访问 git 用户。 您可以通过编辑 /etc/ssh/sshd_config 并将 git 添加到 AllowUsers 指令来做到这一点。 完成后,重新启动 SSH 服务器:

sudo 服务 ssh 重启

配置 Gitolite


接下来的步骤将在我们的 git 服务器上进行。 使用您的普通用户重新登录。

我们可以用我们的“git”用户登录,用我们刚刚传输的公钥初始化 gitolite。

sudo su - git

现在,我们可以使用以下命令设置 gitolite:

gl-setup /tmp/git-admin.pub

点击 ENTER 将配置拉入您的编辑器。 扫描内容以确保默认配置满足您的需求。 您可以随时更改它。

完成后,保存并退出文件。

如何管理 Gitolite


回到您的本地计算机上,您可以开始管理 gitolite。

如果您还没有在这台计算机上安装 git,您需要安装它:

sudo apt-get install git-core

首先,我们需要将 gitolite 信息从我们的 git 服务器克隆到我们的本地机器:

git clone git@ git_server_IP_address :gitolite-admin

这将在您的当前目录中创建一个名为 gitolite-admin 的新目录。 在这里,我们可以对访问策略进行更改,然后将这些更改推送到 git 服务器。

将新用户添加到 Gitolite


要将用户添加到您的项目中,您将需要他们的公钥。 Gitolite 通过将要登录的用户名与具有相同名称的公钥相关联来工作。 我们将假设我们有一个名为 john 的用户用于此演示。

在本地机器上,我们可以切换到gitolite-admin目录,看看里面有什么:

cd gitolite-admin
ls

conf    keydir

里面有两个目录:confkeydir。 不出所料,keydir 包含用户密钥。

您将与“john”通信并获取他计划使用的公钥。 然后,您将该密钥复制到此目录中,如下所示:

cp /path/to/john's/public/key.pub ~/gitolite-admin/keydir/john.pub

之后,您需要将新的公钥添加到 git 存储库。

首先,我们要配置将与管理 git 操作关联的用户名和电子邮件。 键入以下命令进行配置:

 git 配置 --global 用户名 “ your_name_here ” git config --global user.email “ your_email  @地址 .com ”

您可能还想配置 git 以使用您选择的编辑器。 键入此命令以指定您的首选项:

git config --global core.editor your_editor_choice

现在,我们可以将新文件添加到 git:

git add keydir/john.pub

使用消息提交更改:

git commit -a -m “新用户约翰添加”

将更改推送到 git 服务器以保存结果:

git push

使用 Gitolite 配置访问


当您在上一节中添加用户时,您可能已经注意到如下警告:

remote: 
remote:         ***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in the config file:
remote: john(john.pub)

您将收到一条消息,指出新用户不在配置文件中。 这意味着用户“john”是 gitolite 已知的,但尚未为他创建访问权限。

我们可以通过编辑 ~/gitolite-admin/conf/gitolite.conf 文件轻松地将他添加到我们的配置中。

不过,我们将更进一步,给他自己的存储库。 我们将创建一个名为 johnsproject 的存储库并授予他访问权限:

nano ~/gitolite-admin/conf/gitolite.conf

repo    gitolite-admin
        RW+     =   git-admin

repo    testing
        RW+     =   @all

如您所见,语法非常简单。

我们使用 repo 关键字后跟其名称来指定一个 git 存储库。 在此之下,我们编写权限类型、等号 (=) 以及应该获得该访问权限的用户。

组可以用这样的一行来定义:

@group_name = 用户 1 用户 2 用户 3

之后,我们可以通过引用组来引用多个用户:

回购 some_repo RW+ = @ group_name

一个名为 @all 的特殊组根据上下文引用所有用户或所有存储库。

权限可以是以下值之一:

  • R:只读访问
  • RW:可以读取或推送新的更改。 无法删除 git 服务器上已经存在的引用。
  • RW+:可以破坏性推送,或者删除服务器上的refs。
  • -:无权访问指定内容。

我们可以通过将这些行添加到文件末尾来授予“john”对名为 johnsproject 的新存储库的完全访问权限:

repo    johnsproject
        RW+     =       john

保存并关闭文件。

现在,我们可以使用新消息提交此更改:

git commit -a -m “制作约翰的仓库”

最后,将更改推送到 git 服务器:

git push

现在,“john”应该能够使用以下命令从他创建公钥和私钥的计算机上克隆他的项目存储库:

git clone git@ git_server_IP_address :johnsproject

结论


您现在应该正确配置了 gitolite。 您应该能够轻松创建 git 用户,而不必担心每次都配置随附的操作系统用户和权限。

如果您要管理多个不同团队的项目,最好设置与项目相对应的组。 根据项目将 keydir 密钥组织到子目录中也可能会有所帮助。 Gitolite 将以相同的方式使用它们,但出于管理目的,它们会更容易找到。

贾斯汀·艾林伍德