CentOS搭建Git服务器及权限管理(gitolite)

CentOS搭建Git服务器及权限管理

声明:本教程,仅作为配置的记录,细节不展开,需要您有一点linux的命令基础,仅作为配置参考。

1. 系统环境

系统: Linux:CentOS 7.2 64位

由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。

查看ssh版本

$ ssh -V

输出以下表示没问题,可以继续。 版本可能不一致,能用即可。

OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改。

2. 安装git

建议以下操作都切换到root

# 请确保您切换到了root账户
yum install -y git

验证是否安装成功

$ git --version

输出如下内容表示成功:

git version x.x.x.x

3. 添加git的管理的账户和设置密码

设置专门管理git的账号非必须,但是建议这么操作。

# 添加git账户
$ adduser git

修改git的密码

$ passwd git

然后两次输入git的密码确认后。

查看git是否安装成功

$ cd /home && ls -al

如果已经有了git,那么表示成,参考如下:

drwxr-xr-x. 5 root root 4096 Apr 4 15:03 .
dr-xr-xr-x. 19 root root 4096 Apr 4 15:05 ..
drwx------ 10 git git 4096 Apr 4 00:26 git

默认还给我们分配一个名字叫git的组。

4. git的权限管理

git仓库的权限管理,我们可以手动进行管理和配置,也可以通过其他辅助工具。如果小团队的话,直接通过ssh公钥进行管理即可,如果大点的团队,最好用gitolite 或者 gitosis,两者都差不多,一个是Perl开发,一个是Python开发。

以下我分别介绍手动管理权限和使用gitolite管理的方式,注意两者不兼容,不能混用。

5. git的手动权限管理

经过以上步骤,其实服务器的基本已经配置好,但是需要设置权限和配置远程访问git仓库的方式。我们只介绍ssh的方式,https不做介绍。

5.1 配置服务端的ssh访问

切换到git账号,并创建ssh的默认目录和校验公钥的配置文件

# 1.切换到git账号
$ su git

2.进入 git账户的主目录

$ cd /home/git

3.创建.ssh的配置,如果此文件夹已经存在请忽略此步。

$ mkdir .ssh

4. 进入刚创建的.ssh目录并创建authorized_keys文件,此文件存放客户端远程访问的 ssh的公钥。

touch authorized_keys

5. 设置权限,此步骤不能省略,而且权限值也不要改,不然会报错。

chmod 600 /home/git/.ssh/authorized_keys

此时,服务端的配置基本完成。接下需要把客户端的公钥拷贝到authorized_keys文件中。

5.2 配置客户端的ssh私钥并上传服务器

以下是客户端创建ssh私钥和拷贝的过程,如果您有私钥越过创建私钥的过程。

请用您的客户端进入终端(如果只有一台电脑,可以用不同的账号模拟不同客户端)

第一步: 创建客户端的ssh私钥和公钥

检查是否已经拥有ssh公钥和私钥:进入用户的主目录。

用户主目录: Windows系统:C:\Users\用户名 Linux系统:/home/用户名 Mac系统:/Users/用户名

然后查看是否有.ssh文件夹,此文件夹下是否有如下几个文件。

# 用户主目录的.ssh文件夹下
.ssh
├── id_rsa
└── id_rsa.pub # 我们要用的私钥

如果没有,那么用ssh-keygen创建ssh的私钥。

$ ssh-keygen -t rsa

接下来,三个回车默认即可。

创建私钥成功后,在查看用户目录是否有意加有了公钥文件id_rsa.pub

第二步: 拷贝私钥到git的服务器

如何把客户端的文件拷贝到服务器端,我建议用scp命令进行拷贝。

以下以mac系统为例:

# 首先进入我的用户主目录的.ssh目录下,注意用户名xxx替换成自己的
$ cd /Users/xxx/.ssh

以下命令是:把本地的id_rsa.pub文件拷贝到 aicoder.com服务器,登录aicoder.com服务的账号是git。

冒号后面默认就是git账号的主目录,最后文件被保存成laoma.pub

注意:把域名换成你自己的或者ip,最后的文件名可以自己定,后面还有用。

$ scp ./id_rsa.pub [email protected]:.ssh/laoma.pub

5.3 服务器端添加客户端的SSH公钥

切换到服务器端,把刚才上传的laoma.pub文件的内容添加到 authorized_keys中,就可以允许客户端ssh访问了。

# 切换到git账户
cd /home/git/.ssh

$ ls -al

查看一下.ssh目录是否有authorized_keys和laoma.pub文件

.

|-- authorized_keys

`-- laoma.pub

如果有,那么进行下面的把laoma.pub文件中的内容添加到authorized_keys中.

$ cat laoma.pub >> authorized_keys

>> 是在文件后面追加的意思,主要如果用其他编辑器,每个ssh的pub要单独一行,建议用cat命令方便简单。

到此为止,您配置的客户端应该可以ssh的方式直接用git账号登录服务器。(当然不安全,后面可以控制)

# 在客户端用ssh测试连接远程服务器,请将域名aicoder.com换成你的ip地址或者域名
$ ssh [email protected]

第一次连接有警告,输入yes继续即可。如果可以连接上,那么恭喜你的ssh配置已经可以了。

6. git的自动权限管理:gitolite(不要跟上面的步骤混做!!!)

如果团队大点的,我们可以用gitolite管理,而且使用很方便。

6.1 gitolite的安装和配置

第一步:添加gitolite依赖的perl的包

$ yum install 'perl(Data::Dumper)' 

第二步:清空服务器端配置的ssh的公钥

确保:~/.ssh/authorized_keys文件是空的,或者不存在。如果已经存在,建议你把他改名即可,比如:authorized_keys.bak

第三步:上传管理员的客户端的ssh公钥到服务器

把你管理员电脑的ssh的id_rsa.pub文件拷贝到服务器的: $HOME/YourName.pub

YourName可以自定义,最好根据不同伙伴的名字命名。

参考:

# mac客户端
$ scp /Users/fly/.ssh/id_rsa.pub [email protected]:malun.pub

第四步:安装配置gitolite

用git账号登录,并执行如下命令。

# 切换到git账号
$ su git

进入git主目录

$ cd /home/git

下载gitolite的仓库

$ git clone https://github.com/sitaramc/gitolite

创建bin文件夹,必须!!!

HOME/bin

用下载下来的仓库中的insall执行安装操作,指向的目录就是上一命令行创建的目录

HOME/bin

把上传到服务器的 管理员的公钥setup到gitolite中,注意:YourName.pub改成你自己的文件名。

$ ~/bin/gitolite setup -pk ~/YourName.pub

此时安装配完成后,查看git主目录

$ ls /home/git
drwxr-xr-x 7 git git 4096 Apr 3 23:50 bin # 我们创建的存放gitolite二进制
drwxrwxr-x 6 git git 4096 Apr 3 23:40 gitolite
drwx------ 6 git git 4096 Apr 3 23:52 .gitolite
-rw------- 1 git git 7130 Apr 3 23:52 .gitolite.rc
-rw------- 1 git git 398 Apr 3 23:39 malun.pub # 管理员的公钥
drwxrw---- 3 git git 4096 Apr 3 23:40 .pki
-rw------- 1 git git 19 Apr 4 00:26 projects.list # 仓库列表(gitolite自动创建)
drwx------ 5 git git 4096 Apr 4 00:26 repositories # 存放所有仓库文件夹
drwx------ 2 git git 4096 Apr 4 15:50 .ssh

repositories目录下已经有了两个git仓库了。

.

|-- gitolite-admin.git # 管理配置权限的仓库

`-- testing.git # 测试仓库

好了,到此位置,管理员就可以直接把默认的远程管理的仓库gitolite-admin直接clone到本地进行管理git服务了。

第五步:管理员在本地管理和配置服务器端的仓库

下载服务器端的远程管理仓库

# 下载远程管理仓库, 请把aicoder.com换成你自己服务器的域名或者ip
cd gitolite-admin

目录结构如下:

.

├── conf # 配置文件夹

│ └── gitolite.conf # 配置权限的文件

└── keydir # 客户端的公钥文件夹,所有伙伴的公钥要放到此目录下

└── malun.pub

6.2 gitolite的权限配置

  • 添加其他开发的小伙伴

    把小伙伴的公钥发给管理员。管理员添加到gitolite-admin仓库的keydir目录下,注意文件名字格式为username.pub,username就是配置权限时的用户名。

  • 配置用户对仓库的读写权限

    直接修改conf文件夹下的,gitolite.conf文件。简单解释下几个用法:

    • repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。

    • RW 代表可读可写

    • @all 代表所有人。

    • masterdev代表分支

    参考:

    @admin = malun
    @om = malun bcd

    repo gitolite-admin
    RW+ = malun

    repo testing
    RW+ = @all

    repo om
    RW+ = @admin
    RW+ master = @admin
    RW+ dev = @om

  • 应用修改到服务器端

做好配置后,由管理员把修改push到服务器端,会自动处理。

 git add keydir
git push

此时登录服务端,查看/home/git/repositories/目录下是否增加了对应的仓库了呢?

将已有项目推送到master

cd DZ_PublicSecurity git remote rm origin git remote add origin [email protected]:DZ_PublicSecurity.git git push origin master

修改gitolite管理员

image-20210526142008026.png

你可能感兴趣的:(CentOS搭建Git服务器及权限管理(gitolite))