CentOS6.9搭建Git服务器并使用Gitolite配置权限

简介: 这篇笔记记录了在CentOS6.9中yum搭建Git服务器,并使用Gitolite管理权限的详细过程,如本机密钥生成,通过config文件管理本机多密钥,免密码ssh认证,Gitolite管理权限,分支和用户权限配置等

1.安装git

yum install git
#查看git安装路径
[root@localhost ~]# whereis git
git: /usr/bin/git /usr/share/man/man1/git.1.gz
AI 代码解读

2.创建git用户并设置密码

useradd -m -d /home/git -U git
passwd git
AI 代码解读

3.客户机生成管理员密钥

进入客户机用户主目录中存放密钥的目录,请确认客户机已经安装了git,windows安装git自带ssh-keygen,linux需先安装openssh

cd ~/.ssh
AI 代码解读

下面是生成的过程,三次回车便可。-f指定文件名,不指定默认id_rsa,-C指定备注信息

ssh-keygen -t rsa -f admin -C "admin key"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in admin.
Your public key has been saved in admin.pub.
The key fingerprint is:
SHA256:LDUsBMGwy7M6ATvFKwwTEVAGDoXWXwxvT8OHfIzvX/M admin key
The key's randomart image is:
+---[RSA 2048]----+
|BB*oo++          |
|=o o...+o +      |
|.+. . oo+B +     |
|+.o. ..+o.=      |
|+++.  . S. .     |
|=..o   .  .      |
| +.        .   o |
|..          . . o|
|..           .  E|
+----[SHA256]-----+
AI 代码解读

同样方法生成一个普通用户的密钥,以供后续测试

ssh-keygen -t rsa -f testdev -C "testdev key"
AI 代码解读

创建配置文件config,没有扩展名哦,之后的文件列表应该是这样子的

PS C:\Users\xxx\.ssh> ls
    目录: C:\Users\xxx\.ssh
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/12/29     19:32           1675 admin
-a----       2018/12/29     19:32            392 admin.pub
-a----       2018/12/29     19:30              0 config
-a----       2018/12/29     19:32           1675 testdev
-a----       2018/12/29     19:32            394 testdev.pub
AI 代码解读

config文件写入如下信息,不同用户指定不同密钥

host gitadmin
    hostname 192.168.75.134
    port 22
    identityfile ~/.ssh/admin

host gittest
    hostname 192.168.75.134
    port 22
    identityfile ~/.ssh/testdev
AI 代码解读

4.scp或rz命令将admin.pub公钥上传至服务器/tmp目录下,这步只上传管理员的密钥

[root@localhost tmp]# ls
admin.pub  yum.log
AI 代码解读

5.安装gitolite依赖

yum install perl openssh
AI 代码解读

6.克隆gitolite仓库并安装

切换git用户

su git
AI 代码解读

进入git主目录

cd $HOME
AI 代码解读

克隆

git clone https://github.com/sitaramc/gitolite
AI 代码解读

创建bin目录

mkdir bin
AI 代码解读

安装到bin目录

gitolite/install -to $HOME/bin
AI 代码解读

把管理员的公钥setup到gitolite中

cd $HOME
$HOME/bin/gitolite setup -pk /tmp/admin.pub
AI 代码解读

7.克隆管理员仓库

#查看gitolite初始的两个仓库
ls repositories
gitolite-admin.git #管理员仓库 
testing.git #测试仓库
AI 代码解读

克隆gitolite-admin.git仓库到客户机,也可以直接在服务器上克隆管理

$ git clone git@gitadmin:gitolite-admin
Cloning into 'gitolite-admin'...
The authenticity of host '192.168.75.134 (192.168.75.134)' can't be established.
RSA key fingerprint is SHA256:+pmq2Ry0m51xMwo0NGAIolV0W4VEhOqT9dm0RKZ2abE.
Are you sure you want to continue connecting (yes/no)?
#选择yes,本次请求公钥会被记录在~.ssh/known_hosts中
Warning: Permanently added '192.168.75.134' (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.
AI 代码解读

查看目录

$ ls
gitolite-admin/

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository
$ cd gitolite-admin/

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/gitolite-admin (master)
$ ls
conf/  keydir/
AI 代码解读

8.使用gitolite-admin仓库对git进行权限管理

进入keydir目录

$ cd keydir/
xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/gitolite-admin/keydir (master)
$ ls
admin.pub
AI 代码解读

我们刚才上传到服务器/tmp目录下的管理员公钥被安装在了这里...???
因为gitolite是托管git的工具,客户机对服务器的所有git操作都由gitolite来接收,然后传达给git服务器,gitolite将用户的操作请求交给git服务器之前,会先做鉴权
所以在clone时,仓库地址一定按照gitolite要求的规则写,比如clone管理仓库

$ git clone git@gitadmin:gitolite-admin
AI 代码解读

如果客户机只有一个用户操作git服务器,生成密钥时,-f参数可以不写(并且不需要在config中设置规则),默认会生成id_rsa

ssh-keygen -t rsa -C "admin key"
AI 代码解读

客户机向git服务器发出clone请求时,会在~/.ssh目录中优先寻找id_rsa密钥,那么clone就可以这么写

$ git clone git@192.168.75.134:gitolite-admin
AI 代码解读

二者是等效的,当然仓库名你也可以带上.git
虽然gitolite-admin.git仓库存在于服务器/home/git/repositories/gitolite-admin.git中,但你不能这样克隆

$ git clone git@192.168.75.134:/home/git/repositories/gitolite-admin.git
AI 代码解读

重要的事情说三遍...不能这样克隆...不能这样克隆...不能这样克隆...
因为这样clone不符合gitolite要求,绕过了gitolite直接请求了git,那么gitolite的鉴权就没有被执行,后续的钩子也会失败...等灯等灯
并且/home/git/.ssh/authorized_keys这个认证密钥文件也必须交给gitolite来维护

新增普通用户并设置权限

我们在安装gitolite时就设定了admin是管理用户,现在我们将testdev和admin用户都设置为可对testing.git测试仓库进行读写,但testdev用户不能推送和回滚master分支

将testdev用户的公钥拷贝到keydir目录必须是testdev.pub

$ ls
admin.pub  testdev.pub
AI 代码解读

配置conf目录中的gitolite.conf如下

@leader = admin
@developer = testdev
repo gitolite-admin
    RW+     =   @leader

repo testing
    R        =  @developer
    - master =  @developer
    RW       =  @developer
    RW+      =  @leader
AI 代码解读

repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。
RW 代表可读可写
RW+代表可读可写可回滚
-代表拒绝
@leader定义管理组宏
@developer定义开发组宏
@all则代表所有人
master代表分支

进入仓库根目录,推送

$ cd gitolite-admin/

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/gitolite-admin (master)
$ ls
conf/  keydir/

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/gitolite-admin (master)
$ git add .

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/gitolite-admin (master)
$ git commit -m "admin test"
[master 8e7cd13] admin test
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 keydir/testdev.pub

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/gitolite-admin (master)
$ git push
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 12 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 794 bytes | 794.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To gitadmin:gitolite-admin
   aa44037..8e7cd13  master -> master
AI 代码解读

进入服务器查看testdev的密钥是否已经添加进去了

[git@localhost ~]$ cat /home/git/.ssh/authorized_keys 
#gitolite start
command="/home/git/bin/gitolite-shell admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3Nza......PdyoooNQYpL admin key
command="/home/git/bin/gitolite-shell testdev",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3N......gHolS/1QLUp testdev key
#gitolite end
AI 代码解读

客户机结合本地config配置测试权限是否正确

PS C:\Users\xxx\.ssh> ssh git@gitadmin
PTY allocation request failed on channel 0
hello admin, this is git@localhost running gitolite3 v3.6.10-2-g64aa53b on git 1.7.1

 R W    gitolite-admin
 R W    testing
Connection to 192.168.75.134 closed.
PS C:\Users\xxx\.ssh> ssh git@gittest
PTY allocation request failed on channel 0
hello testdev, this is git@localhost running gitolite3 v3.6.10-2-g64aa53b on git 1.7.1

 R W    testing
Connection to 192.168.75.134 closed.
AI 代码解读

9.testdev用户克隆testing.git仓库(这个仓库是空的哦,管理员需要pull下来,新建个空文件README.md,再commit,push上去并创建master分支)

clone下来,在README.md中随便写点什么

$ git clone git@gittest:testing.git
AI 代码解读

推送

$ git add .

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/testing (master)
$ git commit -m "new commit"
[master (root-commit) 6310141] new commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

xxx@DESKTOP-CR69BB6 MINGW64 /e/repository/testing (master)
$ git push
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 410 bytes | 410.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: FATAL: W refs/heads/master testing testdev DENIED by refs/heads/master
remote: error: hook declined to update refs/heads/master
To gittest:testing.git
 ! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'git@gittest:testing.git'
AI 代码解读

是不是对master的push被拒绝了,ok...
部署过程中要严格按照gitolite要求的规则来,操作时只要提示输入密码,这就是错误的,应该去检查客户机和服务器上gitolite托管的密钥是否正确
原文地址:https://www.jmsite.cn/blog-242.html

目录
打赏
0
0
0
0
4
分享
相关文章
阿里云服务器4核8G配置:ECS实例规格、CPU型号及使用场景说明
阿里云4核8G服务器ECS提供多种实例规格,包括高主频计算型hfc8i、计算型c8i、通用算力型u1、经济型e等。各规格配备不同CPU型号与主频性能,适用于机器学习、数据分析、游戏服务器、Web前端等多种场景。用户可根据需求选择Intel或AMD处理器,如第四代Xeon或AMD EPYC系列,满足高性能计算及企业级应用要求。更多详情参见阿里云官方文档。
126 1
阿里云服务器4核8G配置:ECS实例规格、CPU型号及使用场景说明
阿里云4核8G服务器ECS提供多种实例规格,如高主频计算型hfc8i、计算型c8i、通用算力型u1、经济型e等。各规格基于不同CPU型号与主频性能设计,适用于机器学习、数据分析、游戏服务器、网站应用等多种场景。用户可根据实际需求选择适合的配置,满足高性能计算或经济性要求。更多详情及参数说明可参考官方文档。
259 4
阿里云服务器2核8G、4核16G、8核32G配置热门实例性能、适用场景对于与选择参考
2025年,阿里云针对2核8G、4核16G、8核32G这三种主流配置,推出了一系列极具吸引力的活动,为用户提供了多样化的选择。目前,2核8G配置的云服务器活动价格为522.79元/年起,4核16G配置的云服务器活动价格为2149.92元/年起,而8核32G配置的云服务器活动价格则为4249.44元/年起。这些价格涵盖了经济型e、通用算力型u1、通用型g8i、通用型g7和通用型g8y等不同实例规格,为用户提供了多样化的选择。本文将对这些配置热门实例规格的实例性能、适用场景和活动价格做个对比,以供选择和参考。
阿里云服务器2核4G、4核8G、8核16G配置主要适用场景及最新活动价格参考
云服务器现在已成为企业和个人开展业务、搭建应用不可或缺的基础设施,在众多配置中,2核4G、4核8G和8核16G是广大用户选择较多的配置,目前阿里云服务器通用算力型u1实例2核4G5M带宽企业用户购买的价格只要199元1年,且续费价格不变,4核8G目前的活动价格为955.58元1年起,8核16G配置选择计算型c8y实例的活动价格为3815.03元1年起。本文将为大家解析2025年截止目前阿里云服务器中2核4G、4核8G、8核16G配置的活动报价,帮助用户了解最新价格信息,以及不同配置的主要适用场景,以供参考和选择。
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
160 3
阿里云服务器38元、99元、199元配置、适用场景区别及选择参考
目前,阿里云有多款特价云服务器产品,轻量云服务器2核2G200M峰值带宽38元一年,经济型e实例云服务器2核2G3M带宽99元1年、4核16G10M云服务器70元1个月、210元3个月,8核32G10M带宽160元1个月、480元3个月,通用算力型u1实例2核4G5M带宽199元一年、4核8G云服务器955元一年。本文将详细介绍阿里云的三款特价云服务器产品:38元的轻量应用服务器、99元的云服务器ECS经济型e实例,以及199元的云服务器ECS u1实例,帮助用户更好地了解这些产品的规格、配置、适用场景及购买资格和注意事项。
阿里云服务器ECS实例规格选型指南:根据使用场景选择合适的配置
随着云计算的快速发展,阿里云提供了丰富多样的云服务器ECS实例规格,满足不同用户需求。然而,面对众多选项,新手往往难以抉择。本文详细解析八大业务场景,包括新手入门、网站业务、数据库、大数据、游戏、视频、AI机器学习及高性能计算等,帮助用户精准选择合适的实例规格。通过了解各实例的硬件配置与软件优化特点,用户可实现资源高效利用与成本合理控制,推动业务发展。更多详情与性能参考可访问阿里云官方文档。
149 17
阿里云服务器使用centos还是ubuntu?
在选择阿里云服务器操作系统时,CentOS和Ubuntu各有优势。CentOS以企业级稳定性著称,适合数据库、ERP等长期稳定需求;而Ubuntu开发者友好,支持最新硬件与功能,更适合开发/测试环境及云计算场景。两者在阿里云上均有官方镜像支持,性能差异可忽略。无特殊需求时推荐Ubuntu 22.04 LTS,若需RHEL生态则选AlmaLinux。根据实际需求、团队技术栈及场景灵活决策,阿里云还支持更换系统盘降低试错成本。
阿里云服务器选购配置方案云产品搭配指南参考
对于部分新手用户来说,面对阿里云众多的服务器配置和云产品,如何做出合适的选择,成为了大家比较关注的问题。本文将深入探讨阿里云服务器选择的相关知识,包括配置方案、云服务器活动以及云产品搭配策略,帮助您在众多选项中找到最适合自己的解决方案。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问