VPS搭建git服务器
有一些项目是你在本地写的代码,不用放在公司的服务器上,但又需要版本管理。我已经受够了没有版本管理的本地代码,稍一修改就有可能导致无法还原。鉴于此类情况,一般我们会选择上传到免费的github上面去寄存。但是,说实话有些内容其实属于公司的隐私,不方便对外公开。那么这种情况下,就需要自己搭建一个版本管理的服务器,专供自己使用,如果他人也想看,可以授权。
我手头正好有一个VPS,为何不拿它来搭建git服务器呢?
1. 服务器端安装Git
我的VPS系统是CentOS 6,一般情况下,VPS都会预装Git,可以直接输入命令git
来查看,如果没有安装的话,可以使用yum
来安装
1 | yum install git |
2. 服务器端添加git用户
我们创建一个专门用来管理git服务的用户,取名为git
1 | // 查看是否存在git用户 |
3. 服务器端创建Git仓库
假设我们Git仓库的父目录为/data/git
,在此目录下我们创建一个名为example.git
的仓库,仓库的后缀名为.git
1 | // 创建example.git仓库 |
4. 客户端克隆远程仓库
假设我们客户端Git仓库的父目录为~/data/git
,现在需要从服务器端克隆下刚才创建的example.git
仓库
1 | mkdir -p ~/data/git |
注意,默认SSH的端口号为22,但VPS一般会修改这个端口号,可以在/etc/ssh/sshd_config
文件中找到Port
字段来查看具体端口号。
输入git用户密码后,即可看到example.git
仓库克隆成功!
至此,一个最简单的VPS上的git服务器就已经搭建完成了。
在客户端打开~/.ssh/known_hosts
隐藏文件,可以看到刚才创建的连接,被记录在该文件中。还有一个example.git
仓库的隐藏配置文件位于~/data/git/example.git/.git/config
。
5. 进阶篇,Git免密操作
5.1 客户端创建SSH公钥和私钥
什么是客户端的免费操作?说白了就是之前每次使用git
命令的时候都要输一遍git用户的密码,有了免密操作之后,每次执行git
命令都无需输入密码。
首先在隐藏目录~/.ssh
下查看,是否已经存在id_rsa
以及id_rsa.pub
文件。其中id_rsa
是ssh私钥,id_rsa.pub
是ssh公钥。那这两个文件有什么用呢?
把id_rsa.pub
,即ssh公钥放到服务器上,用户使用ssh连接VPS,会上传id_rsa.pub
,如果服务器上的公钥和用户上传的公钥匹配,那么此次ssh操作无需输入密码。
下面的命令是根据邮箱来创建ssh公钥和私钥的,将yourEmail
替换成你的邮箱即可
1 | ssh-keygen -t rsa -C "yourEmail" |
5.2 服务器端打开RSA认证
打开/etc/ssh/sshd_config
文件,就是我前面说的记录VPS的SSH端口号的文件
1 | // 打开文件 |
保存并重启sshd服务
1 | service sshd restart |
根据上面的AuthorizedKeysFile
字段可以得知,ssh公钥存放在.ssh/authorized_keys
文件中。由于管理Git服务的用户是git,所以真正存放ssh公钥的路径为/home/git/.ssh/authorized_keys
。
1 | // 切换git用户 |
5.3 将客户端公钥导到服务器端
在客户端输入命令
1 | ssh git@yourVpsIp -p yourVpsPort 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub |
上传完毕后,在服务器端查看一下.ssh/authorized_keys
文件的权限是否属于git用户
1 | su git |
确保.ssh
文件及其目录下的文件.ssh/authorized_keys
所属人以及所属权限组都是git用户。
注意,接下来修改.ssh
目录的权限为700,修改.ssh/authorized_keys
文件的权限为600。这一步极其重要,如果采用默认权限的话,rsa权限认证,也就是git免密操作永远都无法成功,只会要求你输入git用户的密码,回到了第4步。
rsa权限认证的步骤为,先对比用户上传的ssh公钥和服务器端的公钥是否一致,如果一致则不用输入密码,如果不一致或着没有上传,则输入密码。
5.4 再次克隆远程仓库
将刚才克隆的远程仓库删除
1 | cd ~/data/git/ |
然后重新克隆
1 | git clone ssh://git@yourVpsIp:yourVpsPort/data/git/example.git |
这一次是不是不用再输入git用户的密码了呢,如果不再提示输入密码,并且直接克隆成功,那么恭喜你,git免密操作成功!如果仍旧要输密码,确保你哪一个步骤没有做对。
我们再换一台主机,我用的是自己的linux虚拟机,这台主机没有上传自己的ssh公钥,本地也没有ssh私钥,使用上面的命令克隆仓库,你会发现,这一次服务器提示要求你输入git用户的密码。说明rsa认证功能是正确的。
6. 禁止git用户使用ssh登录服务器
考虑到安全因素,需要禁止git用户ssh登录服务器,过程很简单,打开/etc/passwd
文件,找到git
用户那一行
1 | // 原行 |
保存后,git用户可以通过ssh正常使用git服务,但无法登录shell。
总结
搭建Git服务器其实并不复杂,如果只是自己或少数人使用的话,没必要配置得过于复杂。就像到过程中的第4步,其实就够了。我只是出于好奇心,才去做了rsa认证。