快速搭建私有 Git 服务器指南

快速搭建私有Git服务器

前言:Git 仓库的 SSH 传输

熟悉 Git 的同学可能知道,Git 默认支持两种传输协议:SSH 和 HTTP/HTTPS。

服务器一般都自带 SSH,这意味着,我们可以什么都不安装,只通过 SSH 就把仓库推到远程服务器。

所以,一条命令就够了。我们只要在远程服务器上,建立同名的 Git 仓库,服务器就搭建好了。


$ git init --bare [仓库名].git

上面命令中,各个部分的含义如下。

(1)git init:初始化一个 Git 仓库。

(2)--bare:表示新仓库不需要工作目录,只建立 Git 数据目录。

(3)[仓库名].git:指定仓库名,比如仓库名是example,那么就要建立一个叫做example.git的 Git 数据目录。

执行这条命令以后,一个最简易的 Git 服务器就诞生了。后面,我们就可以通过 SSH 连接,把本地代码推送到这个远程 Git 仓库了。

核心原理

利用 Linux 服务器自带的 SSH 服务,通过在服务器上创建一个专门用户(如 git),并将客户端用户的 SSH 公钥添加到该用户的 authorized_keys 文件中,从而实现安全的免密码认证和代码推送。


准备工作

  1. 一台虚拟机:安装好任意 Linux 发行版(如 Ubuntu, CentOS, Debian),并确保网络通畅。
  2. 本地电脑:准备好你的 SSH 密钥对(id_rsaid_rsa.pub)。

搭建步骤(在虚拟机上操作)

第 1 步:安装 Git

sudo yum install -y git

确认安装成功:

git --version

第 2 步:创建专用的 Git 用户

为了安全起见,我们不直接使用 root,而是创建一个专门的 git 用户:

# 1. 创建 git 用户
sudo adduser git
# 按照提示为 git 用户设置一个密码(后续可禁用密码登录)
sudo passwd git

# 2. 切换到 git 用户
sudo -iu git

# 3. 创建 ~/.ssh 目录并设置严格权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

第 3 步:配置 SSH 密钥认证

所有需要访问仓库的开发者的公钥,添加到 git 用户的 authorized_keys 文件中。

在客户端(开发者机器)上生成 SSH 密钥对:

ssh-keygen -t rsa -b 4096 -C "you@example.com"

把生成的公钥追加到服务器的 git 用户下:

cat ~/.ssh/id_rsa.pub | ssh git@<服务器IP> "cat >> ~/.ssh/authorized_keys"
  • 注意:用 >> 追加,而不是 > 覆盖。每个公钥占一行。

第 4 步:初始化一个裸仓库(Git Server 的核心)

# 在 git 用户的家目录或其他目录下创建
git init --bare /home/git/example.git
  • --bare 参数是关键!它创建一个没有工作目录、只包含版本控制数据(在 .git 目录中)的仓库,专门用于共享。

客户端操作(在你的本地电脑上)

第 5 步:克隆远程仓库并开始使用

现在,任何其公钥已被添加到 authorized_keys 的用户,都可以克隆和推送代码了。

# 克隆仓库
git clone git@your_vm_ip:/home/git/example.git

# 进入仓库目录,进行常规的 Git 操作(add, commit)
cd example
echo "# My Project" > README.md
git add .
git commit -m "Initial commit"

# 推送到远程服务器
git push origin main

如果一切顺利,说明服务器搭建完成。

命令解释

  • git@your_vm_ip: 使用 git 用户登录你的虚拟机。
  • :/home/git/example.git: 服务器上裸仓库的绝对路径。

SELinux 常见问题

一个坑,如果是用 root 用户创建 authorized_keys

在 CentOS 默认开启 SELinux 的情况下,~/.ssh/authorized_keys 文件可能会因为安全上下文不对而导致 公钥认证失败

查看上下文:

ls -Z /home/git/.ssh/authorized_keys

如果显示 home_root_t 而不是 ssh_home_t,说明 SELinux 阻止了 SSH 访问。

解决办法:

sudo restorecon -Rv /home/git/.ssh

执行后会修正为正确的 ssh_home_t 类型,从而允许公钥登录。


高级配置与安全加固(可选但强烈推荐)

  1. 禁用 git 用户的 Shell 登录(增强安全)
    通过修改 /etc/passwd,将 git 用户的登录 shell 改为 git-shell(一个只允许 Git 操作的受限 shell)。

    # 在服务器上使用 root 或 sudo 执行
    sudo usermod -s /usr/bin/git-shell git
    

    这样,用户无法通过 ssh git@your_vm_ip 获得一个普通的 shell,但依然可以执行 git fetch, git push 等操作。

  2. 在服务器上禁用密码登录(强制使用密钥认证)
    编辑 SSH 服务器配置:

    sudo vim /etc/ssh/sshd_config
    

    找到并修改:

    PasswordAuthentication no
    PubkeyAuthentication yes
    

    重启 SSH 服务生效:

    sudo systemctl restart sshd
    

流程总结

  1. 安装 Git
  2. 创建 git 用户
  3. 配置 SSH 公钥登录
  4. 创建裸仓库
  5. 客户端连接并推送代码
  6. 解决 SELinux 的授权问题

最终验证

在本地机器上执行:

ssh -T git@your_vm_ip

如果配置正确,你会看到一条类似 “You’ve successfully authenticated, but GitShell does not provide interactive shell access.” 的成功消息,并且无法执行其他 Linux 命令。这证明你的 Git 服务器已经成功搭建并安全配置!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值