设为首页 收藏本站
查看: 826|回复: 0

[经验分享] linux服务器上搭建gitolite实现对git server的版本库的权限控制

[复制链接]

尚未签到

发表于 2018-9-16 11:02:32 | 显示全部楼层 |阅读模式
一、环境介绍:
  1.1Git账户管理机器manage
  ip:10.0.0.56
  

[root@manage ~]# cat /etc/redhat-release
  
CentOS>  
[root@manage ~]# hostname
  
manage
  
[root@manage ~]# tail -2 /etc/hosts
  
10.0.0.56 manage
  
10.0.0.11 git-server
  

  1.2.git远程版本库git-server
  git远程版本库ip:10.0.0.11
  

[root@git-server ~]# cat /etc/redhat-release
  
CentOS>  
[root@git-server ~]# hostname
  
git-server
  
[root@git-server ~]# tail -2 /etc/hosts
  
10.0.0.11 git-server
  
10.0.0.56 server
  

二、安装部署

2.1在git账户管理机器上(10.0.0.56)操作:
  2.1.1安装git
  [root@manage ~]#  yum install git –y
  2.1.2创建公钥和私钥
  Git账户管理员需要在自己机器(10.0.0.56)上创建SSH公钥/私钥对。
  ssh-keygen -f ~/.ssh/git-admin
  [root@manage ~]# ll .ssh/
  git-admin      git-admin.pub  known_hosts
  2.1.3配置config文件
  为了方便管理和不至于和其他公钥私钥混淆,先配置下SSH客户端的文件 ~/.ssh/config,
  可以通过创建主机别名,在连接主机时,使用特定的公钥。例如 ~/.ssh/config 文件中的下列配置
  

[root@manage ~]# cat .ssh/config  
host git-server
  user git
  hostname 10.0.0.11
  port 22
  identityfile ~/.ssh/git-admin
  

  把10.0.0.56管理员机器上的公钥copy到git-server(10.0.0.11)服务器上,
  [root@manage ~]# scp .ssh/git-admin.pub git-server:/tmp/
  提示:
  注意1.git-server机器的sshd端口是必须是22端口,否则在配置免秘钥进行git提交代码时,会提交失败的
  注意2.Git账户管理机器manage(10.0.0.56)上的/root/.ssh/config文件权限必须是600,否则在后续添加公钥时,会报错,提示权限不允许
  

[root@manage ~]# ll /root/.ssh/config  
-rw-rw-r-- 1 root root 99 Mar 29 11:28 /root/.ssh/config
  
[root@manage ~]# chmod 600 /root/.ssh/config
  
[root@manage ~]# ll /root/.ssh/config
  
-rw------- 1 root root 99 Mar 29 11:28 /root/.ssh/config
  

2.2在git-server远程版本库机器上操作:
  在git-server git远程版本库(ip:10.0.0.11)机器上安装gitolite软件来管理git版本库账户
  在Git-server git远程版本库安装git
  参考文档:
  http://blog.sina.com.cn/s/blog_4b5039210102e3r3.html
  说明:
  Gitolite其实也是一个git repository,首先在git-server机器上安装好后,在client端manage机器上把server上的repository clone下来,在本地做一些更改,再push回server,server端的hooks会根据push上来的配置来更新权限。
  在git-server 上操作:
  2.2.1在git-server 机器上创建git用户
  

useradd git  
passwd  git
  
123456
  

  2.2.2在git-server上安装git和下载gitolite
  在git的用户目录下执行下载gitolite软件包:
  

[root@git-server ~]# yum install git -y  [root@git-server ~]# su - git
  
[git@git-server ~]$ git clone https://github.com/sitaramc/gitolite
  
Initialized empty Git repository in /home/git/gitolite/.git/
  remote: Counting objects: 9385, done.
  
remote: Total 9385 (delta 0), reused 0 (delta 0), pack-reused 9385
  
Receiving objects: 100% (9385/9385), 2.96 MiB | 95 KiB/s, done.
  
Resolving deltas: 100% (5805/5805), done.
  

  2.2.3安装gitolite
  

[git@git-server ~]$ mkdir bin  
[git@git-server ~]$ gitolite/install -to $HOME/bin
  
[git@git-server ~]$ ls
  
bin  gitolite
  
[git@git-server ~]$ cd bin
  
[git@git-server bin]$ ls
  
commands  gitolite  gitolite-shell  lib  syntactic-sugar  triggers  VERSION  VREF
  

  会在bin下生成一个gitolite可执行文件
  必须先在10.0.0.56机器把git-admin.pub公钥先拷贝到git-server10.0.0.11机器上
  

[root@manage ~]# scp .ssh/git-admin.pub git-server:/tmp/git-admin.pub  
[git@git-server bin]$ gitolite setup -pk /tmp/git-admin.pub
  
[git@git-server ~]$ cd bin/
  
[git@git-server bin]$ ls
  
gitolite
  
[git@git-server bin]$ gitolite setup -pk /tmp/git-admin.pub
  
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
  
Initialized empty Git repository in /home/git/repositories/testing.git/
  
WARNING: /home/git/.ssh missing; creating a new one
  (this is normal on a brand new install)
  
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
  (this is normal on a brand new install)
  
[git@git-server bin]$
  

  此命令会在你的~/repositories/目录生成两个repository:gitolite-admin.git和testing.git
  

[git@git-server ~]$ cd repositories/  
[git@git-server repositories]$ ls
  
gitolite-admin.git  testing.git
  
[git@git-server bin]$ ll /home/git/repositories/
  
total 8
  
drwx------ 8 git git 4096 Jul 23 15:53 gitolite-admin.git
  
drwx------ 7 git git 4096 Jul 23 15:53 testing.git
  

  用户目录下生成一个project.list,默认里面有一个testing的git的project
  

[git@git-server ~]$ more projects.list  
testing.git
  

  到此处gitolite安装完毕!

2.3再回到在manage端机器上操作:
  克隆 git-server版本库上的gitolite-admin到manage账户管理端机器
  !!!注意:
  

命令一定要是git clone git-server:gitolite-admin  
而不是:git clone git-server:/home/git/repositories/gitolite-admin
  
更不是:git clone git-server:gitolite-admin.git
  

  [root@manage ~]# git clone git-server:gitolite-admin
  提示报错:
  

[root@manage ~]#  git clone git-server:gitolite-admin  
Initialized empty Git repository in /root/gitolite-admin/.git/
  
Bad owner or permissions on /root/.ssh/config
  
fatal: The remote end hung up unexpectedly
  

  权限不对,以下给600权限解决问题
  

[root@manage ~]# ll /root/.ssh/config  
-rw-rw-r-- 1 root root 99 Mar 29 11:28 /root/.ssh/config
  
[root@manage ~]# chmod 600 /root/.ssh/config
  
[root@manage ~]#  git clone git-server:gitolite-admin
  
Initialized empty Git repository in /root/gitolite-admin/.git/
  
Warning: Permanently added '221.195.1.233' (RSA) to the list of known hosts.
  
remote: Counting objects: 6, done.
  
remote: Compressing objects: 100% (4/4), done.
  
remote: Total 6 (delta 0), reused 0 (delta 0)
  
Receiving objects: 100% (6/6), done.
  

  [root@manage ~]# ll gitolite-admin/
  total 8
  drwxrwxr-x 2 root root 4096 Mar 29 12:00 conf
  drwxrwxr-x 2 root root 4096 Mar 29 12:00 keydir
  clone完后会有个新的目录gitolite-admin,里面有两个文件夹conf和keydir,第一个目录中包含的是配置文件,里面就是记录权限配置的地方,第二个目录中则包含所有用户的pub key。
  

[root@manage ~]# ll gitolite-admin/*  
gitolite-admin/conf:
  
total 4
  
-rw-r--r-- 1 root root 77 Jul 22 15:10 gitolite.conf
  
gitolite-admin/keydir:
  
total 4
  
-rw-r--r-- 1 root root 393 Jul 22 15:10 git-admin.pub
  

[root@manage ~]# cat gitolite-admin/conf/gitolite.conf  
repo gitolite-admin
  RW+     =   admin
  

  
repo testing
  
RW+     =   @all
  

  首先 gitolite-admin只有admin有读写权限,其他人都不能读写
  另外一个代码库testing是所有人都可以访问

2.4放置manage端机器的公钥文件git-admin.pub到gitolite-admin/keydir 目录下,然后提交到远程的版本库git-server上
  

[root@manage ~]# git add conf/ keydir/  
[root@manage ~]# git status
  
[root@manage ~]# git push
  

  在git-server 机器远程版本库上查看密钥文件:
  [git@git-server ~]$ cat /home/git/.ssh/authorized_keys
  

#gitolite start  
command="/home/git/gitolite/src/gitolite-shell admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzXc/2BPDIZ/3PnoXhgVEyZLdF5oiE+UuumBeOxcR2FGoGUVEaSWYOZ2zWYIk5RCzKNWb3d9Ur51l7DpQunmCUlvf4lOZ7UT68jnhAF/NNN9a6upEHBls5hpFvVp+DmqOYuVuWs+FQhShPvp70QJfsx/+gg14rw9A1/jN5GdgrrStYorNEE1Ut8/T1t9tNxsIlfwgd6pQPKpWJ11sANWx9U+DfUEAN4a0bCiZ/PQ+9aR+SJ1Y+H68pt2+iy4I8UXuhtgSqYTu5YmxsJlF3uoHypF4lOTqgiP0HYr8FNZ3KWg2ome8fUOnO2VbNvgAXafhLEfBd5zxd6YChDHwfIclvQ== root@manage
  
#gitolite end
  

  此时你可以免秘钥在manage机器上进行克隆远程版本库上的代码:
  

[root@manage ~]# git clone git-server:gitolite-admin  
Initialized empty Git repository in /tmp/gitolite-admin/.git/
  
remote: Counting objects: 16, done.
  
remote: Compressing objects: 100% (12/12), done.
  
remote: Total 16 (delta 2), reused 0 (delta 0)
  
Receiving objects: 100% (16/16), done.
  
Resolving deltas: 100% (2/2), done.
  
[root@manage ~]# ll gitolite-admin
  
total 8
  
drwxrwxr-x 2 root root 4096 Mar 30 21:57 conf
  
drwxrwxr-x 2 root root 4096 Mar 30 21:57 keydir
  

  如果注释掉[git@git-server ~]$ ll /home/git/.ssh/authorized_keys这个文件的内容,在你克隆的时候回提示让你输入密码,同事即使你输入密码,clone远程版本库的代码依旧会失败
  

  

  [root@ tmp]# git clone git-server:gitolite-admin
  Initialized empty Git repository in /tmp/gitolite-admin/.git/
  zydrgit@221.195.1.233's password: 123456
  fatal: 'gitolite-admin' does not appear to be a git repository
  fatal: The remote end hung up unexpectedly



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584464-1-1.html 上篇帖子: GIT 的安装和基本使用 下篇帖子: window10系统电脑上安装putty实现免秘钥提交代码到git远程版本库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表