昨天尝试了在自己的VPS上搭建一个git服务器,中间踩了很多坑,下面是我整个搭建的过程。
具体流程
第一步:安装Git
打开VPS(这里我用的是搬运工,怎么购买VPS可以参考我的这篇博客)的控制后台,进入Shell,然后输入命令:
1 | yum install -y git |
执行完后如图:
查看Git版本,如果能显示Git版本,则说明安装成功。
第二步:添加用户
输入命令
1 | adduser git |
添加一个名为git的用户,并且将当前用户切换到git
第三步:创建仓库
创建一个文件夹用来存放git仓库,然后输入命令
1 | git init --bare mycode.git |
这样就可以创建一个裸仓库,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,如下图:
把服务器的git仓库的用户组改为git
这样仓库就创建完了
第四步:创建证书
在服务器/homg/git目录下创建文件夹.ssh,然后在.ssh文件夹里创建authorized_keys
注意:一定要切换到git用户下再创建,否则使用root用户创建,会因为文件夹权限的问题而造成RSA校验失败,我就是在这里卡了半天
然后在客户端创建公钥,即~/.ssh/id_rsa.pub文件里的内容,然后把公钥填入服务器的authorized_keys文件中
第五步:打开服务器RSA验证
进入服务器/etc/ssh目录,使用vim打开sshd_config(建议先做一个备份),修改如下内容
1 | RSAAuthentication yes |
大部分Linux系统的RSA认证默认就是开启的,如果已经开启,则可以忽略(在这里也卡了好久😭)
然后保存退出,重新启动sshd
第六步:修改指定服务器的ssh端口
一般ssh访问默认的端口是22,但是搬运工VPS修改了ssh访问的端口,而Git访问还是用还是22端口,因此要修改Git使用ssh访问的端口(在这里也卡了好久😭),要查看ssh端口可以在服务器的sshd_config文件中查看,如下:
如果不想修改服务器端口配置,可以修改客户端访问端口。在客户端的/~/.ssh/config文件中添加如下两行,第一行是服务器的地址,第二行是服务器的端口
这样就修改了访问指定服务器时的ssh端口。
第七步:创建本地仓库
经过以上六步,一个Git服务器就建立好了,现在你就可以把仓库clone下来,然后开始使用了。
遇到的坑
在整个搭建过程中,我也踩了很多坑,下面对这些坑做一个总结。
服务器与客户端ssh端口不一致
在完成创建证书之后,按理说,应该已经可以clone仓库了,但是我尝试克隆会报如下错误:
网上找了很多方法,最后发现是因为客户端和服务器的ssh端口不一致导致,修改了客户端的ssh访问端口才解决了这个问题。
ssh验证失败
修改了ssh端口后,可以访问仓库了,但是每次访问都要输入密码,按理说我已经创建了证书,并且也把公钥放到了服务器,为什么还是不行呢?
找了半天,发现服务器的RSA身份校验压根就没有开启,ssh在校验时是先使用RSA进行校验,如果校验失败再使用密码进行校验。修改sshd_config文件,打开身份校验,参照上面的第五步。
打开身份校验之后,发现还是要输入密码。最初我的做法是关闭服务器的ssh密码校验,修改服务器/etc/ssh/sshd_config文件如下内容:
1 | PasswordAuthentication no |
然后重启sshd。
这样修改了之后,由于禁止了密码验证的方式,而RSA验证又失败,所以压根验证失败,访问都访问不了了。
然后我尝试看Log,输入命令:
1 | ssh git@xxx.xxx.xxx.xxx -vvv |
从Log上看,客户端已经把key传给了服务器,但是服务器在验证时失败了,所以八成可能是服务器的问题。
然后我又根据这篇博客修改了目录的权限,但是还是不行。
根据这篇博客关闭了SELinux也还是不行。
然后我又根据这篇博客打开了ssh的log,修改sshd_config如下内容:
然后又重新登录和退出几次ssh,在/var/log/secure里看到了如下内容:
并没有什么有用的信息,不知道是不是我的Log配置的有问题。
找了很多资料,有很多文章都提到了文件夹权限的问题,于是我又回到服务器git目录下看了一下文件夹的权限:
原来我在创建.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?