Git作为一个分布式的版本控制系统,使用git的时候,一般和服务器通讯使用的是ssh协议,用ssh的主要优点是速度快(传输前数据会先压缩,比HTTP快),安全,方便读写。
客户端通过ssh访问服务器端的验证方式一般有两种,一种是用户名密码的方式,一种是使用公私钥认证的方式. 使用公私钥的方式比较方便,无需每次登录输入密码。
某个受信任的客户端的公钥会被设置在服务器端的 ~/.ssh/authorized_keys文件中,有关此文件的格式可以参见 sshd的用户手册 man sshd . authorized_keys有个比较厉害的功能是 支持 command参数,使得每次用户使用此公钥进行验证的时候执行此后面的命令.这样就可以做一些逻辑处理了.
一般git库的管理需要权限控制,如何方便简单的进行库的权限管理呢? authorized_keys是一个思路,指定特定command参数,每次验证好用户后首先执行相关逻辑,检测当前用户是否具有某个权限。 所以便有了gitosis,与其说gitosis是一个git权限管理系统,还不如说它是一个authorized_keys文件管理器.
解决方案:
环境部署
操作系统: CentOS6.3 x64
Git: git-1.7.1
Gitosis: Gitosis
Gitweb: 1.7.1-3
OpenSSH Server: openssh-server-5.3p1
apache: httpd-2.4.4
python-setuptools: python-setuptools-0.6.10-3
Git server(centos6.3 x64): node2.example.com
Git client(centos6.3 x64): node1.example.com
server端配置:
一.关闭iptables和SELINUX
代码如下:
# service iptables stop
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
二.同步时间
代码如下:
# ntpdate cn.pool.ntp.org
三.安装apache
传送门:
四.安装OpenSSH
1.yum安装OpenSSH:
代码如下:
# yum install openssh-server -y
2.修改ssh服务端配置:
代码如下:
# vi /etc/ssh/sshd_config
——————————————————————————————
Port 22 # 修改成你想要的登陆端口
PermitRootLogin no # 禁止root用户登陆
StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication yes # 启用密码认证,默认是打开的
ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特
PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录
——————————————————————————————
3.重启服务:
代码如下:
# /etc/init.d/sshd restart
五.安装Git
代码如下:
# yum install git-core -y
六.安装Gitosis
1.安装Gitosis依赖python-setuptools包
代码如下:
# yum install python-setuptools -y
2.安装Gitosis
代码如下:
# cd ~
# mkdir src
# cd src
# git clone https://github.com/tv42/gitosis.git
# cd gitosis
# python setup.py install
3.为gitosis创建系统用户
代码如下:
# useradd -m git
# passwd git
4. 运行gitosis
(1).将管理员生成的公钥上传或拷贝到服务器上。这里的公钥需要在git服务器管理员下使用ssh-keygen命令来创建
代码如下:
# su - git
保证web页面有权限显示该仓库内容
代码如下:
# chmod -R 755 /home/git
# ssh-keygen -t rsa
# cp ~/.ssh/id_rsa.pub /tmp
(2).初始化gitosis
进入到拷贝过来的id_rsa.pub所在目录
代码如下:
# cd /tmp
# gitosis-init < id_rsa.pub
此时,会在/home/git目录下生成gitosis仓库和配置目录
代码如下:
# cd /home/git
# ll
----------------------------------------------------------------
drwxr-xr-x 2 git git 4096 Aug 12 13:39 gitosis
drwxr-xr-x 4 git git 4096 Aug 12 13:39 repositories
---------------------------------------------------------------
(3).切换回当前(root)用户
代码如下:
# exit
(4).配置权限
如果想要别人能够clone gitosis-admin.git,需要执行以下操作:
代码如下:
# chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
至此,gitosis的安装工作已完成,其相关配置可以有管理员来操作,然后再提交到服务器上.
(5)现在可以试一下用初始化 Gitosis 的公钥的拥有者身份 SSH 登录服务器,应该会看到类似下面这样: