Centos7上搭建git服务器

1. 说明

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
虽然git不必依赖一个中心化的仓库来工作, 但是中心化的仓库也能带来很多好处, 比如方便团队写作, 本文主要讲述, 如何配置git服务器, 让多人通过ssh协议的方式访问服务器端的代码仓库.

2. 第一步: 在Centos7上安装git

1
yum install git

3. 第二步: 配置git用户

3.1. 添加git用户

1
2
3
4
5
adduser git
#建立账户
adduser git
# 打开配置文件
vi /etc/passwd

修改git用户的login shell.
为什么要修改login shell呢?

  • 其一是出于安全考虑, 当你将对方用户的public key添加到authorized_key文件后, 如果git用户的登录shell依然是/bin/bash, 理论上其他用户是可以以git用户登录到服务器的, 这样会很不安全. 我能允许其他用户做的仅仅是clone, push, pull等操作.
  • 其二 如果不改为git-shell其他用户也不能正常使用git
  • 下面是git用户设置修改前和修改的比较
1
2
3
4
原始值 
git:x:1000:1000::/home/git:/bin/bash
修改后值
git:x:1000:1000::/home/git:/usr/bin/git-shell

4. 第三步 配置sshd服务

我们知道git客户端可以使用ssh协议 或者https协议与服务器通信. 这里我们在服务器端配置的是ssh协议

4.1. 首先, 开启 SSH RSA 验证

1
2
# 打开sshd配置文件 
vi /etc/ssh/sshd_config

修改一下一些配置

1
2
3
原始值 修改后值
#RSAAuthentication yes RSAAuthentication yes
#PubkeyAuthentication yes PubkeyAuthentication yes

修改连接超时时间

1
2
3
4
5
6
7
8
9
原始值 

#ClientAliveInterval 0
#ClientAliveCountMax 3

修改后值

ClientAliveInterval 0 #修改保持连接时间,
ClientAliveCountMax 3 #修改保持连接次数。

设置ssh超时断连

1
vim /etc/profile

在HOSTNAME
HISTIZE
后追加timeout超时时间
MOUT=600;600表示超过300秒无操作即断开连接。
并确保 “AuthorizedKeysFile” 的值为 “.ssh/authorized_keys”。
重启 SSH 服务。

1
systemctl restart sshd.service

5. 第四步 创建首个仓库

1
2
3
4
5
6
7
8
9
# 进入目录 
cd /home/git
# 创建 Git 仓库 [name] 为仓库名
git init --bare [name].git

# 修改仓库的owner为 git 用户
chown -R git.git [name].git
chown -R git.git /home/git/.ssh/

6. 第五步 授权用户访问

1
2
3
4
5
6
# 创建目录
mkdir /home/git/.ssh
# 进入目录
cd /home/git/.ssh
#创建文件
touch /home/git/.ssh/authorized_keys

注意: 客户端使用ssh-keygen生成公钥私钥对, 如果已经有公钥, 可直接将公钥添加到服务器端的授权访问文件/home/git/.ssh/authorized_keys

7. 第五步 客户端克隆项目

客户端

1
2
# 拷贝仓库 [server ip] 为服务端 IP
git clone git@[server ip]:/home/git/[name].git

如果能成功克隆项目, 表示服务器端安装和配置成功. 如果不能, 检查网络连接, 检查防火墙等等.

8. 关联阅读

Centos7上源码安装git2.x

gitlab安装升级及迁移

gitlab-runner安装与配置

如何配置git push