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

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

https://www.cnblogs.com/fly_dragon/p/8718614.html

 

声明:本教程,仅作为配置的记录,细节不展开,需要您有一点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账户 $ su 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的公钥。 $ cd /home/git/.ssh $ touch authorized_keys  # 5. 设置权限,此步骤不能省略,而且权限值也不要改,不然会报错。 $ chmod 700 /home/git/.ssh/ $ 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 git@aicoder.com:.ssh/laoma.pub 

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

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

# 切换到git账户 $ su 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 git@aicoder.com  # 第一次连接有警告,输入yes继续即可。如果可以连接上,那么恭喜你的ssh配置已经可以了。 

5.4 服务器端创建测试git仓库

进入服务器的终端。

# 切换到git账号 $ su git # 进入git账号的用户主目录。
$ cd /home/git # 在用户主目录下创建 test.git仓库的文件夹
$ mkdir test.git && cd test.git # 在test.git目录下初始化git仓库
$ git init --bare # 输出如下内容,表示成功 Initialized empty Git repository in /home/git/test.git/

git init –bare 是在当前目录创建一个裸仓库,也就是说没有工作区的文件,直接把git仓库隐藏的文件放在当前目录下,此目录仅用于存储仓库的历史版本等数据。

此时,客户端就可以进行clone或者remote add此仓库了。

5.5 客户端测试连接git远程仓库

客户端,可以新建一个文件夹,初始化一个仓库,然后跟远程服务器上的空仓库建立连接。

# 以下shell代码,纯手写没有验证,如果有错误请自行纠正。 $ mkdir demos && cd demos $ git init $ touch a.txt $ echo 'aicoder.com' >> a.txt
$ git add . $ git commit -m 'the first commit'
# 把当前仓库跟远程仓库添映射 $ git remote add origin git@aicoder.com:test.git
# 把当前仓库push到远程仓库。 $ git push -u origin master

到此为止,我们就可以尽情的享用git私服了,但是!但是!但是!客户端可以直接ssh登录啊,这是bug,也是不安全的隐患,且看下面怎么禁用git账号的shell登录。

5.6 禁止客户端shell登录

因为前面我们添加了客户端的ssh的公钥到远程服务器,所以客户端可以直接通过shell远程登录服务器,这不安全,也不是我们想要的。且看下面如何禁用shell登录:

第一步:
给 /home/git 下面创建git-shell-commands目录,并把目录的拥有者设置为git账户。可以直接用git账号登录服务器终端操作。

$ su git $ mkdir /home/git/git-shell-commands 

此文件夹是git-shell用到的目录,需要我们手动创建,不然报错:fatal: Interactive git shell is not enabled. hint: ~/git-shell-commands should exist and have read and execute access.

第二步:修改/etc/passwd文件,修改

$ vim /etc/passwd  # 可以通过 vim的正则搜索快速定位到这行, 命名模式下 :/git:x  # 找到这句, 注意1000可能是别的数字 git:x:1000:1000::/home/git:/bin/bash
# 改为: git:x:1000:1000::/home/git:/bin/git-shell # 最好不要直接改,可以先复制一行,然后注释掉一行,修改一行,保留原始的,这就是经验!!! # vim快捷键: 命令模式下:yy复制行, p 粘贴 0光标到行首 $到行尾 x删除一个字符 i进入插入模式 # 修改完后退出保存: esc进入命令模式, 输入::wq! 保存退出。

好了,此时我们就不用担心客户端通过shell登录,只允许使用git-shell进行管理git的仓库。

如果有其他小伙伴要连接git服务器,仅需要把他的公钥也添加到authorized_keys即可。

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

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

7.1 gitolite的安装和配置

以下配置此承接第5,如果第6步您已经操作,请注意第二步的说明。

第一步:添加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 git@aicoder.com:malun.pub 

第四步:安装配置gitolite

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

# 切换到git账号 $ su git
# 进入git主目录 $ cd /home/git
# 下载gitolite的仓库 $ git clone https://github.com/sitaramc/gitolite
# 创建bin文件夹,必须!!! $ mkdir -p $HOME/bin # 用下载下来的仓库中的insall执行安装操作,指向的目录就是上一命令行创建的目录 $ ./gitolite二进制/install -to $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 $ git clone git@aicoder.com:gitolite-admin $ cd gitolite-admin # 目录结构如下: # . # ├── conf # 配置文件夹 # │ └── gitolite.conf # 配置权限的文件 # └── keydir # 客户端的公钥文件夹,所有伙伴的公钥要放到此目录下 # └── malun.pub 

7.2 gitolite的权限配置

  • 添加其他开发的小伙伴

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

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

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

    • repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。
    • RW 代表可读可写
    • @all 代表所有人。
    • master和 dev代表分支

    参考:

    @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 conf $ git add keydir $ git commit -m "added foo, gave access to alice, bob, carol" $ git push 

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

总结

其实配置这些并不繁琐,但是需要你有一定的linux的经验,当然你也可以选择使用GitLab或者Github

最后希望能帮到你。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113164.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js清除浏览器缓存的几种方法(项目总结)「建议收藏」

    js清除浏览器缓存的几种方法(项目总结)「建议收藏」以前很少关注这方面的问题,直达我们的技术经理找我们说要换框架,为什么换框架呢,因为缓存的问题,原来的项目是用版本号作为刷新的依据的。因为微信公众号上有这样一个机制,使用版本好的话,有时做不到及时刷新,所以就用了vue.js,因为它有这样的功能就是如果某个文件里面的数据改变了,那么vue.js就会把这个文件的名字也相应的改掉,所以缓存里面的东西就用不了了,这样就做到了及时刷新,向后台请求数据。…

    2022年7月18日
    38
  • 逗号拼接字符串转list[通俗易懂]

    逗号拼接字符串转list[通俗易懂]将一个用逗号分隔的字符串转为list,代码如下:Stringstr=”aa,aaaa,ddd,ads,sasd”;Typetype=newTypeToken<List<String>>(){}.getType();List<String>list=newGson().fromJson(str,type);个人记录常用代码。…

    2022年5月14日
    167
  • assertequals() php,assertEquals()

    assertequals() php,assertEquals()assertEquals()assertEquals(mixed$expected,mixed$actual[,string$message=”])当两个变量$expected和$actual不相等时报告错误,错误讯息由$message指定。assertNotEquals()是与之相反的断言,接受相同的参数。assertAttributeEquals()和asser…

    2022年7月12日
    13
  • extremedb java_实时内存数据库eXtremeDB 在linux系统下的java开发环境搭建「建议收藏」

    extremedb java_实时内存数据库eXtremeDB 在linux系统下的java开发环境搭建「建议收藏」Linux下配置eXtremeDBJAVA开发环境样例系统环境:操作系统:CentOs6.5×64一、安装必备软件安装jdksudoyuminstalljava-1.7.0-openjdk-devel.x86_64-y安装glibc-develsudoyum-yinstallglibc-devel.i686安装g++sudoyum-yinstallgcc-…

    2022年10月9日
    2
  • Java开源博客源码完整汇总(持续更新)

    Java开源博客源码完整汇总(持续更新)程序员需要拥有一个属于自己的独立博客网站。所以我从网站收集了一些好的Java开源博客系统。既然是属于开源,当然支持我们广大程序员二次开发了。其实搭建属于自己的技术博客网站很简单,只需要一个域名,一台服务器,然后进行网站备案(个人备案很简单)就可以拥有属于自己的博客网站了。程序员一定要及早的打造个人独立IP,拥有自己的独立博客,学会扩大自己的影响力。在公司,你能力最多影响公司的同事。但是在互联网,拥有自己的网站,你就可以影响千千万万的程序员和即将入行的新手程序员1.OneBlog一个简洁美观、功能.

    2022年7月8日
    33
  • 一文教你检测MOS管好坏的五大诀窍「建议收藏」

    MOS管是金属—氧化物-半导体场效应晶体管,或者称是金属—绝缘体—半导体。MOS管因导通压降下,导通电阻小,栅极驱动不需要电流,损耗小,价格便宜等优点在电子行业深受人们的喜爱与追捧,随着电子行业飞跃式的发展,MOS管的需求量也越来越大,就在此时一批批MOS管生产厂家如雨后春笋般涌现到我们的眼前,他们的出现瞬间使得MOS管的质量的急速下滑,由于这些厂家的技术不成熟,而且当中也掺杂了许多山寨的MOS管…

    2022年4月4日
    189

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号