在VPS上搭建Git服务器

昨天尝试了在自己的VPS上搭建一个git服务器,中间踩了很多坑,下面是我整个搭建的过程。

具体流程

第一步:安装Git

打开VPS(这里我用的是搬运工,怎么购买VPS可以参考我的这篇博客)的控制后台,进入Shell,然后输入命令:

1
yum install -y git

执行完后如图:

2

查看Git版本,如果能显示Git版本,则说明安装成功。

3

第二步:添加用户

输入命令

1
2
adduser git
su git

添加一个名为git的用户,并且将当前用户切换到git

4

第三步:创建仓库

创建一个文件夹用来存放git仓库,然后输入命令

1
git init --bare mycode.git

这样就可以创建一个裸仓库,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,如下图:

5

把服务器的git仓库的用户组改为git

6

这样仓库就创建完了

第四步:创建证书

在服务器/homg/git目录下创建文件夹.ssh,然后在.ssh文件夹里创建authorized_keys

注意:一定要切换到git用户下再创建,否则使用root用户创建,会因为文件夹权限的问题而造成RSA校验失败,我就是在这里卡了半天

然后在客户端创建公钥,即~/.ssh/id_rsa.pub文件里的内容,然后把公钥填入服务器的authorized_keys文件中

7

8

第五步:打开服务器RSA验证

进入服务器/etc/ssh目录,使用vim打开sshd_config(建议先做一个备份),修改如下内容

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

大部分Linux系统的RSA认证默认就是开启的,如果已经开启,则可以忽略(在这里也卡了好久😭)

9

然后保存退出,重新启动sshd

10

第六步:修改指定服务器的ssh端口

一般ssh访问默认的端口是22,但是搬运工VPS修改了ssh访问的端口,而Git访问还是用还是22端口,因此要修改Git使用ssh访问的端口(在这里也卡了好久😭),要查看ssh端口可以在服务器的sshd_config文件中查看,如下:

11

如果不想修改服务器端口配置,可以修改客户端访问端口。在客户端的/~/.ssh/config文件中添加如下两行,第一行是服务器的地址,第二行是服务器的端口

12

这样就修改了访问指定服务器时的ssh端口。

第七步:创建本地仓库

经过以上六步,一个Git服务器就建立好了,现在你就可以把仓库clone下来,然后开始使用了。

13

遇到的坑

在整个搭建过程中,我也踩了很多坑,下面对这些坑做一个总结。

服务器与客户端ssh端口不一致

在完成创建证书之后,按理说,应该已经可以clone仓库了,但是我尝试克隆会报如下错误:

14

网上找了很多方法,最后发现是因为客户端和服务器的ssh端口不一致导致,修改了客户端的ssh访问端口才解决了这个问题。

相关参考:修改了SSH默认端口之后,如何配置git?

ssh验证失败

修改了ssh端口后,可以访问仓库了,但是每次访问都要输入密码,按理说我已经创建了证书,并且也把公钥放到了服务器,为什么还是不行呢?

找了半天,发现服务器的RSA身份校验压根就没有开启,ssh在校验时是先使用RSA进行校验,如果校验失败再使用密码进行校验。修改sshd_config文件,打开身份校验,参照上面的第五步。

打开身份校验之后,发现还是要输入密码。最初我的做法是关闭服务器的ssh密码校验,修改服务器/etc/ssh/sshd_config文件如下内容:

1
PasswordAuthentication no

15

然后重启sshd。

这样修改了之后,由于禁止了密码验证的方式,而RSA验证又失败,所以压根验证失败,访问都访问不了了。

16

然后我尝试看Log,输入命令:

1
ssh git@xxx.xxx.xxx.xxx -vvv

从Log上看,客户端已经把key传给了服务器,但是服务器在验证时失败了,所以八成可能是服务器的问题。

20

然后我又根据这篇博客修改了目录的权限,但是还是不行。

根据这篇博客关闭了SELinux也还是不行。

然后我又根据这篇博客打开了ssh的log,修改sshd_config如下内容:

17

然后又重新登录和退出几次ssh,在/var/log/secure里看到了如下内容:

18

并没有什么有用的信息,不知道是不是我的Log配置的有问题。

找了很多资料,有很多文章都提到了文件夹权限的问题,于是我又回到服务器git目录下看了一下文件夹的权限:

19

原来我在创建.ssh目录是用的是root账户,所有造成ssh在进行身份认证时没有权限方位.ssh目录,导致认证失败。输入命令

1
chown git .ssh

将.ssh文件夹的所属用户改为git,.ssh里的authorized_keys文件也做相同的处理,这样改了之后终于可以验证成功了,并且不用输入密码了。

总结

整个搭建过程用了将近一天的时间,虽然过程有些曲折,但是最终还是成功了,而且这个过程中我也学到了不少的东西,更加深入的了解了ssh服务。

希望这篇文章能对大家在搭建git服务器时有所帮助。

参考资料

在CentOS下搭建自己的Git服务器
ssh无密码登录认证失败
sshd_config配置详解
一个SSH 公钥登录失败的问题及解决经验
Permission denied (publickey, gssapi-keyex,gssapi-with-mic,password)
ssh使用公钥授权不通过的问题解决
修改了SSH默认端口之后,如何配置git?