创建带权限控制的git server(使用gitolite)

以ubuntu16为平台,软件包全部使用apt安装,非常省心。
小型企业可以参照搭建一个可用于实际生产的git版本控制系统。
权限控制使用gitolite,配置简单。
请以纯系统在虚拟机中测试本文档。

一、安装好ssh服务器、准备好git用户账号

1. 安装ssh服务器
    sudo apt install openssh-server
    安装完成即可,不需要做任何配置。这里ssh服务器ip是192.168.11.202;

2. 创建用于管理git数据的用户
    sudo adduser gituser
    在git服务器上,只需要一个管理git数据的操作系统用户账号;
    git库中的用户账号不需要在系统中创建,由gitolite管理,简单。

3. 测试连接到ssh服务器
    在客户端运行 ssh gituser@192.168.11.202
    此时输入gituser的密码应该可以登录

二、服务器上安装git和gitolite

1. 安装git
    服务器上默认已经安装了git,如果未安装执行下面的
    sudo apt install git

2. 安装gitolite
    sudo apt install gitolite3
    安装过程中要求输入管理员的key,不用输入,安装完成后再配置;

三、配置gitolite

1. 准备gituser的ssh证书
    在client系统中运行ssh-genkey,生成的key有两个,一个公钥一个私钥,
    私钥留在client系统中,公钥要送到git服务器中(即ssh服务器),做ssh登录使用。
    运行ssh-genkey时询问证书名称,我们输入gituser,默认名称是id_rsa,
    保存在目录~/.ssh/id_rsa,因为我们在生成时输入了gituser,那么证书生成在当前目录
    我们将证书移动到 .ssh 目录

    mv gituser ~/.ssh/
    mv gituser.pub ~/.ssh/
    chmod 600 ~/.ssh/gituser #ssh客户端对私钥会进行权限检查,如果权限不对,会拒绝使用私钥

    不要惧怕证书,一般证书都是成对使用,公钥在服务器,私钥在客户端电脑;
    用证书完全不需要设置密码,而且传送都是加密的,很好用;

2. 拷贝公钥到git服务器
    scp ~/.ssh/gituser.pub gituser@192.168.11.202:~/

3. 配置gitolite

    3.1 现在我们回到server系统,切换到gituser
        su gituser

    3.2 运行gitolite设置
        gitolite setup -pk ~/gituser.pub
        运行下面的内容可以看到gitolite把pub添加了authorized_keys文件中
        vim ~/.ssh/authorized_keys

四、通过gitolite管理项目和用户

1. 定义好client的ssh客户端
    定义好之后,直接通过证书登录,不需要输入用户名和密码,gitolite只使用证书登录方式;
    回到client系统上,编辑 ~/.ssh/config 文档;
    gedit ~/.ssh/config
    加入如下内容

    host gitserver
        HostName    192.168.11.202
        port        22
        IdentityFile    ~/.ssh/gituser


2. clone gitolite的管理库
    gitolite hook了ssh服务,当我们用ssh push git库时,它的hook先处理请求;
    因此它使用一个git库来做管理gitolite配置的方式,当我们push gitolite的管理库时,
    它根据库的内容,创建库、用户;由于它hook了ssh,如何对任何库的读写都经过它,
    因此,它可以根据管理库的设置进行权限控制;
    要注意的是,使用gitolite管理git server时,不要再git server上手动创建库;
    所有库由gitolite自动管理,所有库位于gituser用户的~/repositories 目录中;
    clone任何项目时,不要使用绝对路径,否则gitolite的hook不能正常处理;
    还有,库名称后面不要加.git

    cd ~
    git clone gituser@gitserver:gitolite-admin

3.配置gitolite

    3.1 增加用户
        用ssh-genkey生成公钥和私钥,公钥名称改为“用户名.pub”,比如添加用户tom,文件名就是
        tom.pub
        放到 keydir 目录
        然后git commit,git push,gitolite的hook在提交后,会将pub中的key内容添加到
        gituser用户的~/.ssh/authorized_keys 文件中

        tom配置自己的ssh客户端
        tom中自己的电脑中运行
        gedit ~/.ssh/config
        加入

            host    gitsvr
                HostName        192.168.11.202
                port            22
                IdentityFile    ~/.ssh/tom

        然后可以使用下面命令clone
        git clone gituser@gitsvr:testing

        tom查看自己在该git server的库权限
        ssh gituser@gitsvr info

    3.2 增加git库以及定义gitolite的权限
        官方说明文档:[gitolite doc](http://gitolite.com/gitolite/gitolite.html)
        实现这些都是通过编辑 conf/gitolite.conf 文件来实现的,
        如果在该文件中新定义了git 库,git push的时候,hook就会自动在
        gituser用户的~/repositories 目录中创建一个 git 库;

五、git用户使用客户端

上面配置时创建了tom用户,以及说明了tom如何在自己的电脑上配置ssh客户端
下面说明windows中TortoiseGit客户端中如何操作

1. 准备私钥
    TGit(TortoiseGit),推荐是PuTTY来处理ssh连接;

    1.1 如果我们已经有ssh生成看到key
        我们需要把ssh的key转为PuTTY的key
        按windows按键,输入puttygen;
        选择菜单“Conversions”->“Import Key”,选择sshkey(必须是私钥);
        “key comments”中输入证书的说明文字,方便以后识别,比如我输入gituser,表示是gituser的证书;
        然后点击“Save Private Key”,保存到文件;

    1.2 如果还没有key
        运行“Git Bash Here”
        运行“ssh-keygen”,按提示生成,然后再按上面的说明转成putty的key;

2. clone出项目
    打开TGit的克隆,
    URL:gituser@192.168.11.202:gitolite-admin
    加载Putty密钥选择上面生成的ppk密钥;
    点击“确定”按钮;

如果对你有用,请赞助我一点咖啡豆
请我喝咖啡吧

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐