参考http://blog.csdn.net/zk673820543/article/details/52535601http://blog.51yip.com/server/1752.html,亲试成功。centos系统更多请参考第二个连接

安装

环境

系统:Ubuntu16

升级apt-get

1
# apt-get update

安装git、sshopen-server、sshopen-client

1
# apt-get install git openssh-server openssh-client

git和ssh设置

新建git用户,用于存放git库

1
2
# useradd git -m
# passwd git

设置ssh配置文件,修改/etc/ssh/sshd_config,配置AuthorizedKeysFile选项

1
2
3
4
$ sudo vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /home/git/.ssh/authorized_keys

新建管理用户

新建一个用户git-admin作为git的管理者,并设置密码

1
2
# useradd git-admin -m
# passwd git-admin

生成管理员ssh key

首先切换到git-admin用户下

1
# su git-admin

生成ssh key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ssh-keygen -f admin
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in admin.
Your public key has been saved in admin.pub.
The key fingerprint is:
SHA256:Mu3lpLhW6adRujWPV/lp/8kvOI7ptQQYSIDhwNVe3/w git-admin@aliy
The key's randomart image is:
+---[RSA 2048]----+
|o o+o.. |
| +. o o |
| . . o o o |
| . . + o |
| o S.= . . |
| =oB . Eo |
| .o= + oo ..|
| ...+.O+.ooo|
| .. o+=o+..+B|
+----[SHA256]-----+

将生成的admin.pub暂存tmp

1
$ cp /home/git-admin/.ssh/admin.pub /tmp

安装gitolite

先切换到git用户下,并进入git用户的家目录

1
2
$ su git #需要输入前面设置过的git用户的密码
$ cd ~ #切换到/home/git目录下

安装gitolite

1
2
3
4
5
6
$ git clone https://github.com/sitaramc/gitolite.git
$ mkdir /home/git/bin
$ ./gitolite/install -to /home/git/bin/
$ /home/git/bin/gitolite setup -pk /tmp/admin.pub #从下面日志可以看出新建了两个git库
Initialized empty Git repository in /home/git/repositories/gitolite-admin. #gitolite-admin用于管理git的权限
Initialized empty Git repository in /home/git/repositories/testing.git/

检出gitolite-admin项目

切换到git-admin用户下面,因为安装gitolite的时候使用的是git-admin的公钥id_rsa.pub,所以git-admin可以无密码检出gitolite-admin项目

1
2
$ su git-admin #需要刚刚设置的git-admin账户的密码
$ cd ~ #切换到git-admin家目录/home/git-admin

检出gitolite-admin

1
$ git clone ssh://git@ip/gitolite-admin #ip为你机器的ip

查看一下gitolite-admin项目的结构

1
2
3
4
5
6
$ tree gitolite-admin
gitolite-admin
├── conf
│ └── gitolite.conf
└── keydir
└── admin.pub

  • gitolite-admin/keydir 存放着所有用户的公钥,目前只有admin.pub,后期加入用户,将对应用户生成的公钥重命名加入就可以
  • gitolite-admin/gitolite.conf 该文件为git权限配置文件

日常管理

添加新用户

添加用户和git-admin同理,可以是不同机器上的用户,也可以是windows用户

  • 第一步:生成ssh key 如 前文 执行 ssh-keygen -f haima
  • 第二步:将haima.pub上传 gitolite-admin/keydir 下,不能和gitolite-admin/keydir目录下已有.pub重名
  • 第三步:提交:
1
2
3
4
5
$ pwd
/home/git-admin/gitolite-admin
$ git add *
$ git commit -m '添加用户haima'
$ git push

注:当添加的用户有多个密钥时,在/home/user/.ssh/config中配置路由

1
2
3
4
5
host ip #对应安装git服务的ip
Hostname ip #对应安装git服务的ip
Port port #默认为22,可以不配
PreferredAuthentications publickey
IdentityFile ~/.ssh/haima #对应本地.pub文件名

添加项目

添加项目就变得非常简单了,直接修改配置文件并提交,gitolite会自动生成没有的库
编辑gitolite-admin/gitolite.conf

1
2
3
4
5
6
7
8
repo new_test
RW+ = haima
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all

保存gitolite-admin/gitolite.conf后提交到仓库:

1
2
3
4
5
$ pwd
/home/git-admin/gitolite-admin
$ git add *
$ git commit -m '添加git库new_test,并赋权haima'
$ git push

此时你使用root权限查看git仓库,会发现多了new_test.git

1
2
# ls /home/git/repositories/
gitolite-admin.git new_test.git testing.git

检出项目

使用生成haima.pub的用户,检出new_test

1
$ git clone ssh://git@ip/new_test #ip为你服务端机器的ip