凌峰创科服务平台

ubuntu git服务器

在Ubuntu系统上搭建Git服务器是企业或个人团队进行版本控制管理的常见需求,通过自建Git服务器可以更好地控制代码仓库的访问权限、数据安全性和定制化功能,以下是详细的搭建步骤和配置方法,包括环境准备、服务安装、仓库管理、权限控制及安全加固等内容。

ubuntu git服务器-图1
(图片来源网络,侵删)

环境准备与基础安装

首先需要一台已安装Ubuntu 20.04或22.04 LTS版本的服务器,确保系统已更新至最新状态,执行以下命令更新系统并安装必要的软件包:

sudo apt update && sudo apt upgrade -y
sudo apt install -y git openssh-server

Git是版本控制核心工具,OpenSSH则用于远程访问,安装完成后,创建一个专门的Git管理用户(如gituser),避免使用root用户操作:

sudo adduser gituser

根据提示设置密码,并确认用户信息,随后,切换至gituser身份进行后续操作:

su - gituser

初始化Git仓库与配置

在gituser的家目录下创建一个空仓库目录,并初始化一个裸仓库(bare repository),裸仓库没有工作区,仅包含版本历史信息,适合作为中央仓库:

ubuntu git服务器-图2
(图片来源网络,侵删)
mkdir -p ~/git-repos
cd ~/git-repos
git init --bare project.git

project.git即为一个可用的Git仓库,为了方便管理,可以创建一个projects目录来存放多个仓库,并通过符号链接或直接在目录中初始化新仓库。

配置SSH密钥认证

为了安全访问Git仓库,推荐使用SSH密钥认证而非密码,在客户端机器上生成SSH密钥对(如果尚未生成):

ssh-keygen -t ed25519 -C "your_email@example.com"

将公钥(~/.ssh/id_ed25519.pub复制到服务器的gituser用户的~/.ssh/authorized_keys文件中,在服务器端执行以下操作:

mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

然后将客户端的公钥追加到authorized_keys文件中,为确保安全性,可以禁用密码登录,编辑SSH配置文件/etc/ssh/sshd_config,设置:

ubuntu git服务器-图3
(图片来源网络,侵删)
PasswordAuthentication no
PubkeyAuthentication yes

重启SSH服务使配置生效:

sudo systemctl restart sshd

仓库管理与推送测试

在客户端机器上,克隆刚创建的仓库:

git clone gituser@your_server_ip:/home/gituser/git-repos/project.git

进入克隆的仓库目录,创建一个测试文件并提交:

cd project
echo "# Test Project" > README.md
git add .
git commit -m "Initial commit"
git push origin main

如果推送成功,说明Git服务器已正常运行,服务器上的project.git仓库会收到客户端提交的代码。

权限控制与用户管理

如果需要为不同用户分配不同仓库的读写权限,可以通过修改authorized_keys文件实现,为用户A创建command限制,使其只能访问特定仓库:

command="git-shell -c 'git receive-pack '\''/home/gituser/git-repos/project.git'\'''" ssh-rsa AAAAB3NzaC1yc2E... user_a@example.com

这样,用户A通过SSH登录后只能执行Git相关命令,无法访问shell,可以结合gitolite工具实现更细粒度的权限管理,该工具支持基于用户/组的读写权限配置。

安全加固建议

  1. 定期备份:通过rsyncgit bundle命令定期备份仓库数据,防止数据丢失。
  2. 防火墙配置:仅开放SSH端口(默认22),并使用防火墙限制访问IP:
    sudo ufw allow from 192.168.1.0/24 to any port 22
    sudo ufw enable
  3. 日志监控:检查Git操作日志,可通过git log命令查看提交历史,或结合syslog记录SSH访问日志。

常见问题与解决方案

以下是两个常见问题的解答:

FAQs

  1. 问题:客户端推送时提示“Permission denied (publickey)”
    解答:检查服务器~/.ssh/authorized_keys文件中是否包含正确的公钥,并确保文件权限为600,确认客户端的私钥未被修改或损坏,可通过ssh -T gituser@your_server_ip测试SSH连接是否正常。

  2. 问题:如何为多个仓库设置不同的管理员权限?
    解答:可以使用gitolite工具,它通过~/.gitolite/conf/gitolite.conf文件配置仓库权限,为仓库project1.git分配管理员admin1admin2

    repo project1.git
        RW+ = admin1 admin2

    然后运行gitolite setup更新配置即可实现精细权限控制。

通过以上步骤,即可在Ubuntu系统上搭建一个功能完善、安全可靠的Git服务器,满足团队协作的版本控制需求,根据实际需求,还可以进一步集成Web界面(如GitLab)或持续集成工具,提升开发效率。

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