Linux上搭建Git服务器

artoria 2019-01-07 14:37:57 3659 珍藏 12

分类专栏: Linux Git 文章标签: Git RSA

版权

因为github能够收费帮咱们治理我的项目(即我的项目的版本控制),因而咱们通常会将一些开源我的项目放在github的公共仓库。
但咱们常常会有这样的需要:出于商业目标,咱们必须要我的项目的源文件进行窃密。
这个时候再用github的公有仓库治理咱们的我的项目就不适合—github的公有仓库前两天还是“免费”的呀,当初收费了。
这个时候,咱们就能够思考搭建一个公有的Git服务器。
以下是阿里云服务器Linux作为服务器零碎,本机Windows作为客户端零碎进行示例阐明。

装置Git

Linux上通过yum命令装置Git

`# 通过yum工具拉取并装置最新版本的git工具包yum install git# 正确显示git的版本号,则示意曾经正确装置git --version# 咱们默认都是通过“git用户”来治理git服务器,因而要新建一个git用户# 测试服务器上是否有git用户id git# 如果没有,则通过如下命令增加一个git组下的git用户,并为git用户设置登录明码groupadd gituseradd -g git gitpasswd git` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12

命令执行胜利后,测试成果应该如下:

Windows通过安装包装置Git

在Git官网下载地址,下载最新版本的Git。装置实现后配置Git的环境变量。
Git官网文档外面有阐明,谷歌/百度也能搜到很多教程,这里就不再赘述。
如果装置实现并配置好了Git的环境变量,鼠标右击后的菜单栏,能够看到Git Bash Here的选项,抉择后即可关上git的命令行工具。

在Linux服务器端创立Git仓库

`# 新建一个空白目录blog.git,作为Git仓库mkdir -p /home/gitrepo/blog.git# 初始化仓库,--bare示意只生成一个裸仓库,没有工作目录(.git),会保留git历史提交的版本信息。git init --bare /home/gitrepo/blog.git# 将该目录的所有人改为git用户cd /home/gitrepochown -R git:git blog.git` *   1*   2*   3*   4*   5*   6*   7

Windows客户端拉取近程仓库

在桌面通过Git Bash Here,关上git的命令行工具,进行如下测试:

`# 创立e://test目录,作为本地仓库cd e:mkdir testcd test# 克隆近程仓库git clone git@47.96.86.36:/home/gitrepo/blog.git# 这段命令的含意:以git用户的身份,拉取ip地址为47.96.86.36的主机上目录为/home/gitrepo/blog.git对应近程仓库治理的工作目录。这里要键入的明码就是passwd git命令为git用户设置的明码。` *   1*   2*   3*   4*   5*   6*   7

命令执行胜利后的效果图如下:

因为咱们这里刚刚初始化Git仓库blog.git,目前该Git仓库治理的工作目录中没有任何内容,所以克隆到客户端时,工作目录blog中没有任何内容。这里的.git是暗藏目录,外面寄存的就是本地仓库对应的工作目录blog的版本信息。
这里须要留神的是:客户端的工作目录下新建文件,通过git push origin master命令推送到近程仓库后,近程仓库是看不到这些文件的。因为近程仓库初始化时设置了参数--bare,示意不会寄存源文件,只是寄存工作目录的版本信息。

设置免密

咱们每次从远端仓库拉取最新版本的我的项目,或从本地往远端推送新代码时,都须要验证明码。这样太麻烦了,Git给咱们提供了一种办法来解决问题。

客户端生成公钥

`# 在客户端生成一对密钥(公钥和私钥)ssh-keygen -t rsa -C "zhenye@netopstec.com"` *   1*   2

这个命令执行后,会在~/.ssh门路即user/.ssh下生成如下文件,记录外面的公钥文件id_rsa.pub中的内容。效果图如下:

服务器端通过RSA认证实现免密

  • 新建寄存公钥的文件
`# 创立目录.sshmkdir /home/git/.ssh# 给该目录授予权限700chmod 700 /home/git/.ssh# 创立文件authorized_keystouch /home/git/.ssh/authorized_keys# 给该文件授予权限600chmod 600 /home/git/.ssh/authorized_keys# 因为权限设置问题(只有“文件所有人”能力操作),须要把把“文件所有人”更改为git用户chown -R git:git  /home/git/.ssh/` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10

阐明:git用户的默认根目录是/home/git,公钥默认是放在/home/git/.ssh/authorized_keys文件外面。
这里须要留神的是每行放一个公钥。
因而这里就是将客户端生成的公钥放在该文件authorized_keys中。

  • 开启RSA认证
`vim /etc/ssh/sshd_config# 批改sshd_config配置文件,把如下3个参数放开(如果没有相应参数须要自行添加)# RSAAuthentication yes# PubkeyAuthentication yes# AuthorizedKeysFile .ssh/authorized_keys# 使该配置文件即时失效systemctl restart sshd` *   1*   2*   3*   4*   5*   6*   7*   8

此时,在客户端进行push/pull等等操作就都不须要输出明码了。

免密的原理阐明:

  • 在客户端执行命令ssh-keygen -t rsa -C "***.com",是通过rsa算法生成了一对密钥(一个公钥和一个密钥),因为这里是依据以后客户端的ip地址、以后工夫戳等等信息生成的,保障了数据的唯一性,这也就保障了用户认证的安全性。
  • 服务端开启了RSA认证后,把客户端的公钥保留在authorized_keys文件中,也就相当于客户端就是放在服务端的白名单中。每次客户端通过git操作来连贯服务端时,就会放行,而不须要明码认证。