凌峰创科服务平台

CentOS 7如何搭建Git服务器?

方案概述:使用 SSH 协议

  • 优点
    • 安全:使用 SSH 密钥进行认证,无需传输密码。
    • 简单:大多数 Linux/macOS 系统都自带 SSH 客户端。
    • 集成:与系统用户账户关联,管理方便。
  • 缺点

    对 Windows 配置 SSH 密钥不如 Git for Windows 自带的 Git Bash 或 PuTTY 直观(但仍然可行)。

    CentOS 7如何搭建Git服务器?-图1
    (图片来源网络,侵删)

第一步:准备工作

  1. 一台干净的 CentOS 7 服务器:确保你有服务器的 root 权限或一个具有 sudo 权限的用户。
  2. 服务器 IP 地址168.1.100
  3. 客户端电脑:用于连接和操作 Git 服务器。

第二步:安装 Git

在服务器上安装 Git 软件。

# 更新系统软件包
sudo yum update -y
# 安装 Git
sudo yum install -y git

安装完成后,验证 Git 是否安装成功:

git --version

你应该会看到类似 git version 1.8.3.1 的输出。


第三步:创建 Git 专用用户

出于安全考虑,不建议使用 root 用户来管理 Git 仓库,我们创建一个名为 gituser 的系统用户。

CentOS 7如何搭建Git服务器?-图2
(图片来源网络,侵删)
# 创建一个名为 gituser 的用户,并设置其 shell 为 /bin/bash
sudo adduser gituser
# 为 gituser 设置密码(可选,但建议设置,方便后续管理)
sudo passwd gituser

第四步:创建 Git 仓库

我们为 gituser 创建一个裸仓库(Bare Repository),裸仓库没有工作目录,它只包含 .git 目录的内容,非常适合作为远程中心仓库。

  1. 切换到 gituser

    sudo su - gituser
  2. 创建一个项目目录

    mkdir -p /home/gituser/repositories
  3. 创建裸仓库:我们以创建一个名为 my-project.git 的仓库为例。

    CentOS 7如何搭建Git服务器?-图3
    (图片来源网络,侵删)
    # --bare 参数表示创建一个裸仓库
    git init --bare /home/gituser/repositories/my-project.git
  4. 设置仓库所有者

    # 退出 gituser shell,回到你原来的用户
    exit
    # 将仓库目录的所有权赋予 gituser
    sudo chown -R gituser:gituser /home/gituser/repositories

你的 Git 服务器已经基本搭建完成,仓库位于 /home/gituser/repositories/my-project.git


第五步:配置 SSH 访问

这是最关键的一步,我们需要允许通过 SSH 访问 gituser,并且只允许执行 Git 相关的命令。

  1. 为开发者创建 SSH 密钥

    • 在开发者(客户端)的电脑上,打开终端(Linux/macOS)或 Git Bash(Windows),执行以下命令,这会生成一对公钥和私钥。
      # 邮箱地址可以随便写,用于标识密钥
      ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • 一路回车即可,默认会在用户主目录的 .ssh 文件夹下生成 id_rsa(私钥)和 id_rsa.pub(公钥)。
  2. 将公钥上传到服务器

    • 直接复制(推荐)

      • 在开发者电脑上,用 cat 命令查看公钥内容:
        cat ~/.ssh/id_rsa.pub
      • 将输出的全部内容(以 ssh-rsa 开头,以邮箱结尾)复制到剪贴板。
      • 在服务器上,登录到 gituser 账户:
        sudo su - gituser
      • 创建 authorized_keys 文件(如果不存在):
        mkdir -p ~/.ssh
        chmod 700 ~/.ssh
        touch ~/.ssh/authorized_keys
        chmod 600 ~/.ssh/authorized_keys
      • 将刚才复制的公钥内容粘贴到 ~/.ssh/authorized_keys 文件中,每行一个公钥。
      • 退出 gituser shell:exit
    • 使用 ssh-copy-id(更安全)

      • 在开发者(客户端)的电脑上,执行以下命令,将你的公钥自动追加到服务器的 authorized_keys 文件中。
        # 替换 user 为服务器上的一个普通用户(如 root 或你自己的 sudo 用户)
        # 替换 server_ip 为你的服务器 IP
        ssh-copy-id user@server_ip

        它会提示你输入 user 用户的密码,验证成功后,公钥就会被自动添加。

  3. 限制 SSH 访问(重要安全步骤): 为了确保 gituser 只能通过 SSH 执行 Git 命令,而不能登录 shell,我们需要修改其配置。

    • 编辑 /etc/passwd 文件
      sudo vi /etc/passwd
    • 找到 gituser 那一行,类似这样:
      gituser:x:1001:1001::/home/gituser:/bin/bash
    • 将末尾的 /bin/bash 修改为 /usr/bin/git-shellgit-shell 是一个专门为 Git 用户设计的、受限的 shell。
      gituser:x:1001:1001::/home/gituser:/usr/bin/git-shell
    • 保存并退出。

    当有人尝试 ssh gituser@server_ip 登录时,他们会被拒绝,并提示 This account is currently not available.,但通过 SSH 进行 Git 操作(如 git clone, git push)仍然可以正常工作。


第六步:在客户端上使用 Git 服务器

你可以在任何一台配置了正确 SSH 密钥的客户端电脑上,开始使用你的 Git 服务器了。

  1. 克隆仓库

    # 格式为 ssh://gituser@server_ip/path/to/repo.git
    # 或者简写为 gituser@server_ip:path/to/repo.git
    git clone gituser@192.168.1.100:/home/gituser/repositories/my-project.git

    如果一切配置正确,你应该能成功克隆仓库。

  2. 推送更改

    cd my-project
    # 添加一些文件或修改
    echo "Hello, Git Server!" > README.md
    git add .
    git commit -m "Initial commit"
    # 推送到服务器
    git push origin master

第七步:可选配置:使用 Gitosis 或 Gitea

如果你需要更复杂的功能,比如为每个项目设置独立的开发者权限、Web 界面、问题跟踪等,可以考虑以下工具:

  • Gitea:一个轻量级的 Git 服务,类似于 GitHub/GitLab,它提供了 Web 界面、用户管理、团队权限、问题跟踪等强大功能。强烈推荐 如果你需要比基本 SSH 更多的功能。

  • Gitosis:一个更老牌的工具,通过管理一个特殊的 gitosis-admin 仓库来控制所有用户和项目的权限,配置相对复杂,现在已较少使用。


通过以上步骤,你就成功地在 CentOS 7 上搭建了一个功能完善、安全可靠的 Git 服务器。

核心步骤回顾

  1. yum install -y git:安装 Git。
  2. adduser gituser:创建专用用户。
  3. git init --bare:创建裸仓库。
  4. ssh-keygen + authorized_keys:配置 SSH 密钥认证。
  5. 修改 /etc/passwd,将 gituser 的 shell 改为 /usr/bin/git-shell:限制访问。

祝你使用愉快!

分享:
扫描分享到社交APP
上一篇
下一篇