方案概述:使用 SSH 协议
- 优点:
- 安全:使用 SSH 密钥进行认证,无需传输密码。
- 简单:大多数 Linux/macOS 系统都自带 SSH 客户端。
- 集成:与系统用户账户关联,管理方便。
- 缺点:
对 Windows 配置 SSH 密钥不如 Git for Windows 自带的 Git Bash 或 PuTTY 直观(但仍然可行)。
(图片来源网络,侵删)
第一步:准备工作
- 一台干净的 CentOS 7 服务器:确保你有服务器的 root 权限或一个具有
sudo权限的用户。 - 服务器 IP 地址:
168.1.100。 - 客户端电脑:用于连接和操作 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 的系统用户。

# 创建一个名为 gituser 的用户,并设置其 shell 为 /bin/bash sudo adduser gituser # 为 gituser 设置密码(可选,但建议设置,方便后续管理) sudo passwd gituser
第四步:创建 Git 仓库
我们为 gituser 创建一个裸仓库(Bare Repository),裸仓库没有工作目录,它只包含 .git 目录的内容,非常适合作为远程中心仓库。
-
切换到
gituser:sudo su - gituser
-
创建一个项目目录:
mkdir -p /home/gituser/repositories
-
创建裸仓库:我们以创建一个名为
my-project.git的仓库为例。
(图片来源网络,侵删)# --bare 参数表示创建一个裸仓库 git init --bare /home/gituser/repositories/my-project.git
-
设置仓库所有者:
# 退出 gituser shell,回到你原来的用户 exit # 将仓库目录的所有权赋予 gituser sudo chown -R gituser:gituser /home/gituser/repositories
你的 Git 服务器已经基本搭建完成,仓库位于 /home/gituser/repositories/my-project.git。
第五步:配置 SSH 访问
这是最关键的一步,我们需要允许通过 SSH 访问 gituser,并且只允许执行 Git 相关的命令。
-
为开发者创建 SSH 密钥:
- 在开发者(客户端)的电脑上,打开终端(Linux/macOS)或 Git Bash(Windows),执行以下命令,这会生成一对公钥和私钥。
# 邮箱地址可以随便写,用于标识密钥 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 一路回车即可,默认会在用户主目录的
.ssh文件夹下生成id_rsa(私钥)和id_rsa.pub(公钥)。
- 在开发者(客户端)的电脑上,打开终端(Linux/macOS)或 Git Bash(Windows),执行以下命令,这会生成一对公钥和私钥。
-
将公钥上传到服务器:
-
直接复制(推荐)
- 在开发者电脑上,用
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文件中,每行一个公钥。 - 退出
gitusershell:exit
- 在开发者电脑上,用
-
使用
ssh-copy-id(更安全)- 在开发者(客户端)的电脑上,执行以下命令,将你的公钥自动追加到服务器的
authorized_keys文件中。# 替换 user 为服务器上的一个普通用户(如 root 或你自己的 sudo 用户) # 替换 server_ip 为你的服务器 IP ssh-copy-id user@server_ip
它会提示你输入
user用户的密码,验证成功后,公钥就会被自动添加。
- 在开发者(客户端)的电脑上,执行以下命令,将你的公钥自动追加到服务器的
-
-
限制 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-shell。git-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 服务器了。
-
克隆仓库:
# 格式为 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
如果一切配置正确,你应该能成功克隆仓库。
-
推送更改:
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 更多的功能。
- 安装简单:通常通过
wget下载二进制文件或使用 Docker 一键部署。 - 官方文档:https://docs.gitea.io/zh-cn/
- 安装简单:通常通过
-
Gitosis:一个更老牌的工具,通过管理一个特殊的
gitosis-admin仓库来控制所有用户和项目的权限,配置相对复杂,现在已较少使用。
通过以上步骤,你就成功地在 CentOS 7 上搭建了一个功能完善、安全可靠的 Git 服务器。
核心步骤回顾:
yum install -y git:安装 Git。adduser gituser:创建专用用户。git init --bare:创建裸仓库。ssh-keygen+authorized_keys:配置 SSH 密钥认证。- 修改
/etc/passwd,将gituser的 shell 改为/usr/bin/git-shell:限制访问。
祝你使用愉快!
