吐槽:作者花了4天的业务时间才终于搭建好这个服务器,对于国外的一些开源东西实在不敢恭维。因为他自己写的配置文档都是有问题的(据作者观察)
声明:本文结合了gitolite源作者教程(完全按照的话保管不行)、一位兄弟的csdn blog教程(其中解释不清楚),以及本人实际操作和理解,并对本文作出了必须有的解释而出现的。本文写作日期为2013-03-23。网络上大多数的转载文章都为旧版本gitolite,安装方法与现在有很大区别(尽管核心架构一样,但你不会或者非常困难安装成功的)。
关于参考的2片文章传送门如下:
https://github.com/sitaramc/gitolite#readme
http://blog.csdn.net/fightingbull/article/details/8116971
环境:
作者电脑:msysgit(也称客户端)(192.168.1.101,这个不描述都可以的)
PC服务器:ubuntu server 12.10(serverip=192.168.1.201);sxxx作为服务器的管理员(非root,但可切换为root)
前置步骤:
1.作者电脑安装msysgit。作为客户端使用。(若为cygwin的话,得安装git。因为msysgit本来就是windows下的git shell)
2.服务器安装git:
sudo apt-get install git
3.服务器安装openssh:
$sudo apt-get install openssh-server
4.在服务器上创建专用账号gitadmin,并将此用户加入组gitolite,用来提供git身份验证:
$sudo addgroup gitolite
$sudo adduser --ingroup gitolite gitadmin
关键步骤:
1.ssh的公钥认证(在客户端操作,即msysgit shell上)
该操作是在客户端,对于SSH的公钥认证请自行google。由于不能用同一个公钥用作shell访问和gitolite访问,我们需要建两个公私钥对,一个给shell,一个给gitolite用。you cannot use the same key for both shell access and for gitoliteaccess(××注意×× 此处是重点中的重点,在此作者被卡3天)
1.1生成2个密钥对//该命令会在用户主目录下创建 .ssh 目录,并在其中创建两个文件:id_rsa(私钥);id_rsa.pub(公钥)
$ssh-keygen -t rsa
//该命令创建一个指定名字为gitadmin的公私钥文件对
$ssh-keygen –f ~/.ssh/gitadmin
1.2上传2个密钥对到服务器上
//上传到服务器用作gitolite访问,见gitolite安装(理解为gitolite shell访问)
$scp ~/.ssh/gitadmin.pub sxxx@serverip:/tmp/
//用作shell访问(理解为ssh shell访问)
$ scp ~/.ssh/id_rsa.pub sxxx@serverip:/tmp/
1.3设置无密码登录服务器
//在msysgit shell 以sxxx账号登陆服务器(这个登录输入密码的)
$ssh sxxx@serverip
//用公钥id_rsa.pub,加入到无密码-SSH登陆到gitamdin身份,用作shell访问(在这之前请确保你的.ssh/authorized_keys不存在,或空。或自己管理好吧,反正我是先删掉的)
sxxx@serverip :~$sudo ssh-copy-id –i /tmp/id_rsa.pub gitadmin@serverip
回到客户端,即退出sxxx这个shell,回到本地msysgit shell中。
$vi ~/.ssh/config
其内容为:
host gitadmin
user gitadmin
hostname serverip
port 22
identityfile ~/.ssh/gitadmin
设置完之后,
//将用默认的id_rsa来认证,可以登陆ssh shell,但非gitolite shell哦
$ssh gitadmin@serverip
//将以服务器账号gitadmin身份登陆服务器,注意不能登陆shell哟,但可访问gitolite。(关于这一步暂时还不能用,等最后配置完gitolite的公钥才可以,提前介绍)
$ssh gitadmin
2.1在msysgit登录到服务器端的gitadmin身份:
ssh gitadmin@serverip(由于之前设置了ssh无密码登录,以及配置了config文件,所以这里就不用密码直接登录到shell 了)
//进入gitadmin的home目录(本人习惯在这个目录安装gitolite)
cd ~
//使用git 下载最新的源码
git clone git://github.com/sitaramc/gitolite
//将作为安装目录
mkdir -p $HOME/bin//把下载的源码安装到刚建立的bin目录中
gitolite/install -to $HOME/bin//××注意×× 这里就是配置你的gitolite管理这身份的公钥的步骤了
$HOME/bin/gitolite setup -pk /tmp/gitadmin.pub2.2 下载gitolite-admin,开始管理你的服务器咯
回到客户端的mysygit shell(就是别登录到服务器端)
//使用gitadmin的专用公钥,克隆gitolite-admin 库(gitolite的原作者教程写的是git clone gitadmin@serverip:gitolite-admin,作者尝试无数方法皆失败)
$git clone gitadmin:gitolite-admin
成功的话,将在本地(作者目录为c:/users/administrator/.ssh/)看到你下载的gitolite-admin库目录了