- 使用 Gitosis / Gitolite(推荐,更安全、更灵活)
这种方法通过一个专门的 Git 管理工具来控制用户对仓库的访问权限,是搭建多用户、多项目 Git 服务器的标准做法。
(图片来源网络,侵删) - 使用 SSH + Authorized Keys(简单,适合个人或小团队)
这种方法利用 Linux 系统自身的用户和 SSH 认证机制,配置简单,但权限管理不如方法一灵活。
准备工作
在开始之前,请确保您有一台已经安装好的 CentOS 系统(本教程以 CentOS 7/8 为例),并且您拥有 root 权限或一个具有 sudo 权限的用户。
更新系统软件包:
sudo yum update -y
使用 Gitolite(推荐)
Gitolite 是一个服务器端的工具,它通过管理一个特殊的 git 用户的 ~/.ssh/authorized_keys 文件来控制哪些用户可以执行哪些操作(如读写、只读等)。

步骤 1:安装 Git 和 Gitolite
-
安装 Git
sudo yum install -y git
-
创建一个专门的
git用户 这个用户将用来运行 Git 服务,不建议使用root用户。sudo adduser git
-
在您的本地电脑上生成 SSH 密钥对 如果您还没有,请在您将要用来管理 Git 服务器的本地电脑**上打开终端,运行以下命令,它会生成一对密钥(
id_rsa和id_rsa.pub),请一路按回车键即可。ssh-keygen -t rsa
您需要将公钥(
~/.ssh/id_rsa.pub)上传到服务器上,我们可以用scp命令:
(图片来源网络,侵删)# 将您的公钥复制到服务器的 /tmp 目录下,并重命名,方便识别 scp ~/.ssh/id_rsa.pub your_server_ip:/tmp/your_name.pub
将
your_server_ip替换为您的服务器 IP 地址,your_name替换为您的名字或任何标识符。
步骤 2:在服务器上配置 Gitolite
-
以
git用户身份登录服务器ssh git@your_server_ip
-
安装 Gitolite
- 安装 Gitolite 的依赖:
sudo yum install -y perl-Time-HiRes
- 从 Git 仓库克隆 Gitolite 并安装:
git clone https://github.com/sitaramc/gitolite mkdir -p ~/bin gitolite/install -to ~/bin
- 安装 Gitolite 的依赖:
-
使用您的公钥初始化 Gitolite 回到您刚才用
scp复制过来的公钥,假设它在/tmp/your_name.pub。# 将公钥移动到 git 用户的主目录下 mv /tmp/your_name.pub ~/ # 运行 setup 命令进行初始化 ~/bin/gitolite setup -pk your_name.pub
执行后,您会看到
git用户的主目录下多了一个repositories目录,这里将存放所有的 Git 仓库,Gitolite 会自动管理~/.ssh/authorized_keys文件。
步骤 3:管理仓库和用户
您可以在您的本地电脑上管理 Gitolite 了。
-
克隆 Gitolite 的管理仓库 退出服务器的
git用户登录,回到您的本地电脑,运行以下命令:git clone git@your_server_ip:gitolite-admin
您需要输入
git用户的密码(如果您之前设置了的话),克隆成功后,您会得到一个名为gitolite-admin的仓库。 -
理解
gitolite-admin仓库的结构keydir/:这个目录用于存放所有用户的公钥,将用户的公钥(user_a.pub,user_b.pub)文件放到这里,他们就能访问服务器了。conf/gitolite.conf:这是核心配置文件,用于定义仓库和用户权限。
-
添加新用户和新仓库
- 添加用户:假设您要添加一个新用户
user_c。- 让
user_c在自己的电脑上生成 SSH 密钥对。 - 将他的公钥(
user_c.pub)通过邮件或其他方式发送给您。 - 将
user_c.pub文件放入gitolite-admin/keydir/目录下。
- 让
- 创建新仓库并设置权限:编辑
gitolite-admin/conf/gitolite.conf文件,添加如下内容:repo my-new-project RW+ = your_name # 您自己拥有读写和创建分支/标签的权限 RW = user_c # user_c 拥有读写权限 R = user_a # user_a 只有只读权限RW+:读写、创建分支/标签。RW:读写,不能创建分支/标签。R:只读。
- 添加用户:假设您要添加一个新用户
-
提交并推送配置
cd gitolite-admin git add . git commit -m "Add user_c and create my-new-project repo" git push
当您
push配置后,Gitolite 服务器会自动更新git用户的authorized_keys文件和仓库的权限。
步骤 4:用户克隆和使用仓库
user_c 可以克隆仓库了:
git clone git@your_server_ip:my-new-project
他会被自动授予正确的权限。
使用 SSH + Authorized Keys(简单方法)
这种方法直接利用 Linux 的用户系统,每个仓库对应一个用户或一个用户组。
步骤 1:创建 Git 用户和仓库目录
-
安装 Git
sudo yum install -y git
-
创建 Git 用户
sudo adduser git
-
创建一个裸仓库 “裸仓库”没有工作目录,只包含 Git 的版本历史信息,非常适合作为服务器端仓库,我们将在
/home/git目录下创建。sudo mkdir -p /home/git/repositories sudo chown -R git:git /home/git/repositories sudo su - git cd ~/repositories git init --bare my-project.git exit
一个名为
my-project.git的仓库已经准备好了。
步骤 2:配置 SSH 访问
-
在您的本地电脑上生成 SSH 密钥对 如果您还没有,请生成:
ssh-keygen -t rsa
-
将公钥添加到服务器的
git用户 将您的公钥(~/.ssh/id_rsa.pub追加到服务器上git用户的authorized_keys文件中。# 将您的公钥内容复制到剪贴板 # 然后登录到服务器 ssh your_server_ip # 切换到 git 用户 sudo su - git # 创建 .ssh 目录(如果不存在) mkdir -p ~/.ssh chmod 700 ~/.ssh # 将公钥内容追加到 authorized_keys 文件 # (请将 'PASTE_YOUR_PUBLIC_KEY_HERE' 替换为您实际的公钥内容) echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys # 设置正确的权限 chmod 600 ~/.ssh/authorized_keys exit exit
步骤 3:克隆和使用仓库
您可以从您的本地电脑克隆这个仓库了:
git clone git@your_server_ip:my-project.git
如果一切顺利,您就可以开始使用这个仓库了。
权限管理(简单版)
- 只读用户:将只读用户的公钥也添加到同一个
~/.ssh/authorized_keys文件中即可,但他们只能clone和fetch,无法push。 - 限制用户:如果您想禁止某个用户
push,可以在~/.ssh/authorized_keys文件中为他那一行公钥的末尾添加命令限制:command="git-receive-pack 'my-project.git'",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA...
这样,这个用户就只能对这个仓库执行
git-receive-pack(即push相关操作),而无法执行其他命令。
总结对比
| 特性 | 方法一 (Gitolite) | 方法二 (SSH + Keys) |
|---|---|---|
| 权限管理 | 非常灵活和强大,可以精确到每个用户对每个仓库的读写、创建分支等权限。 | 相对简单,通常基于用户或用户组,精细控制较麻烦。 |
| 用户管理 | 集中管理,通过 gitolite-admin 仓库添加/删除用户,无需在服务器上创建系统用户。 |
依赖系统用户,虽然不用为每个 Git 用户创建系统用户,但公钥管理相对分散。 |
| 配置方式 | 通过 Git 推送配置文件进行管理,非常方便。 | 需要手动编辑服务器上的 authorized_keys 文件。 |
| 适用场景 | 多用户、多项目、需要复杂权限控制的团队。 | 个人项目、小团队、或者对权限要求不高的场景。 |
| 推荐度 | ★★★★★ (强烈推荐) | ★★★☆☆ (简单易用) |
对于绝大多数需要作为正式服务器的场景,强烈推荐使用方法一(Gitolite),它的权限管理能力和便捷的配置方式会为您省去很多后续的麻烦。
