搭建git远程仓库

Linux上搭建Git服务器

artoria 2019-01-07 14:37:57 收藏 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 git
useradd -g git git
passwd git` 

*   1
*   2
*   3
*   4
*   5
*   6
*   7
*   8
*   9
*   10
*   11
*   12

命令执行成功后,测试效果应该如下:

git用户的测试效果图

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/gitrepo
chown -R git:git blog.git` 

*   1
*   2
*   3
*   4
*   5
*   6
*   7

Windows客户端拉取远程仓库

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

`# 创建e://test目录,作为本地仓库
cd e:
mkdir test
cd test
# 克隆远程仓库
git clone [email protected]:/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 "[email protected]"` 

*   1
*   2

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

生成公钥效果图

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

  • 新建存放公钥的文件
`# 创建目录.ssh
mkdir /home/git/.ssh
# 给该目录授予权限700
chmod 700 /home/git/.ssh
# 创建文件authorized_keys
touch /home/git/.ssh/authorized_keys
# 给该文件授予权限600
chmod 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操作来连接服务端时,就会放行,而不需要密码认证。

你可能感兴趣的:(git)