思路
1.在ubuntu 服务器上建立一个专门用于git管理的git用户。
2.在本地利用ssh-keygen 命令创建一个ssh 的公私钥,用于对git的用户和仓库的创建和删除,以及权限的管理
3.ubuntu服务器上安装gitolite
4.权限配置
创建git用户
# su root // 切换到root用户
# adduser --system --shell /bin/bash --group git //创建用户和用户组
# passwd git //配置密码
创建公私钥
// 在本地终端,例如gitbash终端
# ssh-keygen -t rsa -C "rolosiro@mygit.com"
// 会提示输入创建的文件名,例如rolosiro_rsa
// 会提示passphrase 的密码,这个是用来登陆时验证的秘密,我们要进行免登录操作,故直接敲回车设置密码为空
// 操作完成后会生成rolosiro_rsa和rolosiro_rsa.pub两个密钥,前者是私钥需要保存在我们的客户端,后者是公钥需要上传到服务器上
将创建好的rolosiro_rsa.pub通过xftp5上传到ubuntu服务器,例如放在/home/gitkeydir目录下
安装gitolite
可以参照gitolite官网文档进行安装
# su - git
# mkdir -p ~/bin
# git clone git://github.com/sitaramc/gitolite
# gitolite/install -ln
# gitolite setup -pk /home/rolosiro_rsa.pub
// /home/rolosiro_rsa.pub是上一部我们创建好的公钥保存在ubuntu服务器下的路径,这样默认会场景一个yolosiro用户用于管理gitolite,相当于gitolite的管理员,利用这个管理员来创建用户和仓库
安装完成后,默认会创建两个仓库,一个是gitolite-admin ,一个是testing。
gitolite-admin 仓库是我们用来管理gitolite的仓库,包含两个文件夹 conf/ 和 keydir。
conf/gitolite.conf文件用来创建仓库和权限配置,keydir用来存放用户的公钥
权限配置
// 在本地的gitbash终端,对ssh进行配置
// 将上面生成的rolosiro_rsa 和rolosiro_rsa.pub拷贝到gitbash的用户目录下的.ssh/文件夹下面
# cd ~/.ssh/
# ls
rolosiro_rsa rolosiro_rsa.pub
// 配置ssh
#vim config
------------------------------
Host git.yolosiro // 别名
HostName 10.10.10.10 // ubuntu 服务器地址
User git // 之前在ubuntu服务器上创建的用来操作gitolite的用户
identityFile /c/user/rolosiro/.ssh/rolosiro_rsa // 保存的私钥的路径,这个用来告诉ssh本地的私钥地址,ssh发送过来信息后就会利用这个私钥来进行验证和解密信息。
-------------------------------
# cd ~/gitsource // 本地存放git仓库代码的目录
# git clone git@git.yolosiro:gitolite-admin // 克隆gitolite-admin仓库到本地,我们就可以在本地对gitolite进行管理了。
// 下面我们创建一个仓库yolosiro和一个用户dev_user1
// 创建dev_user1,需要先利用ssh-keygen生成dev_user1的公私钥,可以在另外一台电脑上生成,这里我们在同一台电脑上生成
# ssh-keygen -t rsa -C "dev_user1@yolosiro.com"
// 和之前创建rolosiro一样
...
...
// 生成文件 dev_user1 和dev_user1.pub
//将dev_user1.pub复制到本地gitolite-admin仓库的keydir目录下
# cp dev_user1.pub ~/gitsource/gitolite-admin/keydir/dev_user1.pub
这样我们就创建好了一个用户
// 创建仓库和权限管理
# cd ~/gitsource/gitolite-admin/conf
# vim gitolite.conf
-----------------------------------
repo gitolite-admin
RW+ = rolosiro
repo testing
RW+ = @all
repo yolosiro
RW+ = rolosiro dev_user1
-----------------------------------
// 提交修改,并push到远程仓库
// 这样就制定dev_user1 和rolosiro对仓库yolosiro拥有读写权限了。我们就可以利用dev_user1和rolosiro两个用户来使用yolosiro仓库了。
# git add .
# git push origin master
本地拥有多个ssh的key时
例如,上面我们是在本地创建的rolosiro和dev_user1用户,我们目的是使用rolosiro来对gitolite的用户和仓库的权限进行管理;而同时我们又想使用dev_user1来开发yolosiro这个仓库。操作很简单,利用config文件中的别名
# cd ~/.ssh
# vim config
----------------------------------------------
Host gitadmin.yolosiro // 使用这个来管理
HostName 10.10.10.10 // ubuntu 服务器地址
User git
identityFile /c/user/rolosiro/.ssh/rolosiro_rsa
Host gitdev.yolosiro // 使用这个来开发
HostName 10.10.10.10
User git
identityFile /c/user/rolosiro/.ssh/dev_user1
---------------------------------------------
# cd ~/gitsource/
# git clone git@gitadmin.yolosiro:gitolite-admin
# git clone git@gitdev.yolosiro:yolosiro