GIT服务器扩展之gitosis

gitosis介绍


对git比较了解的朋友们应该都比较清楚,git对于客户端用户认证的功能都是将对方公钥保存至本地authorized_keys文件中,如果遇到用户数量比较多的时候,这一管理方式就显得有点力不从心了,每次改删都必须登入服务器,并且缺少用户对哪个项目有权限的控制,裸奔的话,只要authorized_keys文件中有此用户的公钥,此用户将可对所有项目有读与写的权限,所以gitosis就是来解决这个问题的,它是通过一个特殊的git仓库,可在管理端clone此仓库通过修改设定,然后推送至服务端达到用户权限控制的目的。



下面我们就开始部署基于gitosis控制的git仓库


  • 首先在git-server端安装gitosis

[root@git-server gitosis]# mkdir /gitosis                                   
[root@git-server gitosis]# cd /gitosis/
[root@git-server gitosis]# git clone https://github.com/tv42/gitosis.git        //clone远程仓库,此处就理解为wget吧
[root@git-server gitosis]# cd gitosis/
[root@git-server gitosis]# python setup.py install                              //如安装遇以下报错,说明缺少setuptools模块
ImportError: No module named setuptools
[root@git-server gitosis]# wget https://bootstrap.pypa.io/ez_setup.py -O - | python  //下载此模块后重试安装
[root@git-server gitosis]# python setup.py install
  •  
  • 然后在git-admin端生成密钥,将公钥推送至server端,git-admin将用于后期用户权限的管理

[root@gitosis-admin ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
[root@gitosis-admin ~]# scp .ssh/id_rsa.pub 10.8.8.63:/tmp                 

  • server端切换至git用户执行后续操作(git用户在配置结束后可将shell修改为/usr/git-shell)

[root@git-server ~]# su - git
[git@git-server ~]$ gitosis-init < /tmp/id_rsa.pub                        //用git-admin的公钥进行初始化
[git@git-server ~]$ ls                                                    //初始化成功后本地会生成两个目录
gitosis  repositories                                                     //repositories目录为仓库目录

  • 接下来在git-admin主机上clone gitosis-admin.git仓库,此仓库在上一步初始化成功后自动生成,位于repositories下

[root@gitosis-admin gitosis-admin]# mkdir /gitosis-admin
[root@gitosis-admin gitosis-admin]# cd /gitosis-admin/
[root@gitosis-admin gitosis-admin]# git clone [email protected]:gitosis-admin.git

  • 此时在git-server端创建一个测试库用于验证(将用另外一台主机node1尝试clone此库)

[git@git-server ~]$ cd repositories/
[git@git-server repositories]$ mkdir gitosis-test.git
[git@git-server repositories]$ cd gitosis-test.git/
[git@git-server gitosis-test.git]$ git init --bare
Initialized empty Git repository in /home/git/repositories/gitosis-test.git/

  • 主机node1尝试clone

[root@node1 gitosis]# git clone [email protected]:gitosis-admin.git
Cloning into 'gitosis-admin'...
[email protected]'s password:               //测试发现需要输入密码,但git账户是未设密码的,并且此方式不是咱们的目的

  • 上一步失败之后,接下来我们将node1公钥交给git-admin(不少朋友此刻可能坐不住了,逗我嘛,不是说高大上嘛,为什么还要公钥???对于此,小编也表示无奈,小编一开始也表示不敢相信的)


[root@node1 gitosis]# scp /root/.ssh/id_rsa.pub 10.8.8.61:/tmp

  • 接着在git-admin上进行配置(马上接近尾声,最后一哆嗦)


[root@gitosis-admin gitosis-admin]# cp /tmp/id_rsa.pub keydir/alice.pub    //将上一步送过来的公钥拷贝至gitosis-admin库下的keydir中,此步骤需注意拷贝后的文件名,以.pub结尾,以用户名命名,后续配置文件中将用此用户名进行权限配置
[root@gitosis-admin gitosis-admin]# cat << EOF >> gitosis.conf             //将以下内容写入gitosis.conf文件
> [group test]                                                             //定义一个组
> writable = gitosis-test                                                  //定义此组对哪一个库有权限
> members = alice                                                          //定义组成员,成员名同之前公钥命名
> EOF


  • 上一步配置结束之后就算完成了,现在把文件本地库推入server之后就大功告成了

[root@gitosis-admin gitosis-admin]# git add .
[root@gitosis-admin gitosis-admin]# git commit -m "增加alice成员对gitosis-test测试库的访问权限"
[root@gitosis-admin gitosis-admin]# git push

  • 最后用node1验证一下,成功clone到测试库,本文也就结束了

[root@node1 gitosis]# git clone [email protected]:gitosis-test.git
Cloning into 'gitosis-test'...
warning: You appear to have cloned an empty repository.
[root@node1 gitosis]# ls
gitosis-test








你可能感兴趣的:(ha)