搭建私有Git服务器

本文最后更新于:6 天前

0 前言

本文介绍如何搭建私有git服务器,实现免密 git clone/push/pull

我的系统环境:

  • 阿里云 Centos7
  • 服务器ip:47.98.248.***

1 安装Git

用yum安装,比较简单。

1
yum install -y git

安装完成后,用 git version 查看版本。

2 创建一个Git用户

1
adduser git

3 创建证书登录

3.1 打开RSA认证

修改 /etc/ssh/sshd_config 文件中的3项内容,改为:

1
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

3.2 创建authorized_keys文件

此文件用于存储用户公钥。日后如果有需要访问git服务器的用户,将其公钥添加到此文件即可。

因为我们使用git用户访问仓库,所以先创建 /home/git 目录

1
2
3
mkdir /home/git
chmod 700 /home/git #修改权限
chown git:git /home/git #修改用户为git

/home/git 目录下,创建 .ssh 目录

1
2
mkdir /home/git/.ssh
chmod 700 /home/git/.ssh #修改权限

再在 .ssh 目录下创建 authorized_keys 文件

1
2
touch /home/git/.ssh/authorized_keys
chmod 600 /home/git/.ssh/authorized_keys #修改权限

修改 .ssh 目录及 authorized_keys 文件的拥有者为git

1
2
chown git:git /home/git/.ssh
chown git:git /home/git/.ssh/authorized_keys

把用户的公钥放进去,一行一个,再有新的追加即可。

比如我的 authorized_keys 文件(放的是我的公钥):

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDk9Erd5YPRJUEKs+HEVNJFfTdoas47Vw/xxh+LELsSi/FZTFgQf5EfftS3iJxU6T6F5rrsSvmAphZpZ50T/f/a+/Z+kLvZypAKlrSQaWThOlWIdbdpJ270QzrfzKrUcqv3Tki/TeilGWM6YasuRRoxPyQcBmmO3+46l9spn2bv6Mkj64/yhLF0tfjeznZ/A3PVyLq/LAQ9RWfoJPDKrmsf4aMCm2az80rk7qzhxiGKt/G+NUUfTEY3XeuZkSx8T07gyF+wLE91Qf55Xi4phAfVfobBXCgAENEw6oBlKNfFR7Qhuu2R4Hazbf3v4jEBzwC+m5xzyABBp3AztsQ+lRvb leviyan1998@gmail.com

3.3 创建用户公钥(客户端)

我在win10上创建。如果已有,不用再创建。

使用git bash命令行窗口运行:

1
ssh-keygen -t rsa -C "你的邮箱" #生成一对公钥密钥

运行命令后会让你选择保存文件地位置,不用管,连续回车,3次。

一般生成的文件会保存在 C:\Users\user\.ssh 目录下。(比如我的是:C:\Users\yllyandy\.ssh

将生成的公钥(.pub文件)内容添到服务器 authorized_keys 文件中。

4 初始化git仓库

选择一个目录,初始化仓库。比如 /srv/

进入目录 /srv/ 下。运行:

1
2
3
mkdir gitrepo #创建gitrepo目录
cd gitrepo
git init --bare sample.git #初始化一个名为“sample”的仓库(无工作区)

更改仓库所属用户:

1
chown git:git sample.git

5 克隆仓库(客户端)

首先,要在客户端上,安装git。

如果只生成过一对公钥密钥,且未进行过其他配置。则运行下面的命令就行。

1
2
# 格式:git clone git@host:仓库地址
git clone git@47.98.248.213:/srv/gitrepo/sample.git

如果进行过配置,比如我的 C:\Users\yllyandy\.ssh 目录下有 config 文件,配置了两对公钥密钥。内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 该文件用于配置私钥对应地服务器
# aliyun - git user
Host git-server
HostName 47.98.248.213
User git
IdentityFIle C:/Users/yllyandy/.ssh/id_rsa_2
PubKeyAuthentication yes

# aliyun - root user
Host aliyun
HostName 47.98.248.213
User root
IdentityFile C:/Users/yllyandy/.ssh/id_rsa_aliyun
PubKeyAuthentication yes

则需要运行以下命令,才能免密地执行clone操作

1
2
# 格式:git clone Host:仓库位置
git clone git-server:/srv/gitrepo/sample.git

6 禁止git用户用户登录

为了安全起见,需要禁止git用户登录服务器,修改 /etc/passwd 文件:

1
2
3
4
5
#找到原git用户的配置:
git:x:1000:1000::/home/git:/bin/bash

#改为:
git:x:1000:1000::/home/git:/bin/git-shell

至此,git服务器安装完成。

如果有用户需要访问仓库,将他的公钥添加到 .ssh/authorized_keys 文件中即可。