linux服务器上搭建gitolite实现对git server的版本库的权限控制
一、环境介绍:
1.1Git账户管理机器manage
ip:10.0.0.56
1.2.git远程版本库git-server
git远程版本库ip:10.0.0.11
二、安装部署
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 文件中的下列配置
把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,否则在后续添加公钥时,会报错,提示权限不允许
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用户
2.2.2在git-server上安装git和下载gitolite
在git的用户目录下执行下载gitolite软件包:
2.2.3安装gitolite
会在bin下生成一个gitolite可执行文件
必须先在10.0.0.56机器把git-admin.pub公钥先拷贝到git-server10.0.0.11机器上
此命令会在你的~/repositories/目录生成两个repository:gitolite-admin.git和testing.git
用户目录下生成一个project.list,默认里面有一个testing的git的project
到此处gitolite安装完毕!
2.3再回到在manage端机器上操作:
克隆 git-server版本库上的gitolite-admin到manage账户管理端机器
!!!注意:
[root@manage ~]# git clone git-server:gitolite-admin
提示报错:
权限不对,以下给600权限解决问题
[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。
首先 gitolite-admin只有admin有读写权限,其他人都不能读写
另外一个代码库testing是所有人都可以访问
2.4放置manage端机器的公钥文件git-admin.pub到gitolite-admin/keydir 目录下,然后提交到远程的版本库git-server上
在git-server 机器远程版本库上查看密钥文件:
[git@git-server ~]$ cat /home/git/.ssh/authorized_keys
此时你可以免秘钥在manage机器上进行克隆远程版本库上的代码:
如果注释掉[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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤