分别在ubuntu和centos7上试过了。
安装配置gitolite
git服务器账号:git
git管理员账号:work
1.服务器的root账号下git安装,openssh
省略
2. 服务器上新增git账号
3. gitolite服务端的安装(git账号)
1) gitosis已经不维护了,改用gitolite
2) git账号下,在~/目录下新建bin目录
3) 下载安装,并将安装目录加入当前环境变量中,这样在执行gitolite时不用指定路径:
~$ git clone git://github.com/sitaramc/gitolite
~$ gitolite/install -to /home/git/bin
export PATH=/home/git/bin:$PATH
echo $PATH
4. gitolite的管理员用户创建,生成密钥对(work账号)
1) 在本机上再创建一个work账号,作为git的管理员账号
2) 切换到work下生成密钥对
a. 查看~/是否有.ssh目录,如果有的话将里边的内容删除,如果没有新建目录.ssh
b. 生成密钥对,密钥文件名为my_idrsa
~$ ssh-keygen -f .ssh/my_idrsa
c. 查看密钥文件
~$ ls .ssh
d. 启动ssh-agent,如果成功,ps aux | grep ssh-agent能看到
ssh-agent bash
e. 将本地的私钥加入ssh环境中,如果成功会提示Identity added: … …
ssh-add .ssh/my_idrsa
3) 设置目录和文件访问权限
chmod 700 .ssh
chmod 600 .ssh/gitadmin
5. gitolite服务端的配置(要用到刚才管理员账号生成的公钥)
a. 切换到git账号登录
su - git(根据提示输入密码)
b. 将上一步生成的公钥my_idrsa.pub拷贝到~/下面,如果管理员在其他机器上,用rz上传或者scp来拷贝;这里:
~$ sudo cp /home/work/.ssh/my_idrsa.pub ./
如果提示:git is not in the sudoers file. This incident will be reported.
则可以切换到root用户登录来做cp操作,或者修改/etc/sudoers文件把git账号加入其中。
c. 设置公钥,如果~/.ssh已经存在且不为空,先清空,若不存在.ssh,会自动创建
~$ gitolite setup -pk my_idrsa.pub(假设$PATH中已经包含了/home/git/bin)
这个时候,如果之前已经试着建立过信任关系,会提示:
WARNING: keydir/my_idrsa.pub duplicates a non-gitolite key, sshd will ignore it
这个告警信息对gitolite没有影响,如果不想要出现这个warning,也可以在设置公钥之前,把authorized_keys文件里work账号的公钥删掉。
d. 删除~/目录下的my_idrsa.pub
rm -f my_idrsa.pub
e. 修改ssh目录和文件访问权限
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
6. gitolite管理员的配置(work账号)
a. 配置管理员访问服务端的别名
~$ vi .ssh/config(如果这个文件不存在就新建)
host git #给服务端设置的别名
user git #服务端的用户名
hostname localhost #这里管理员与服务端在同一台机器上
port 22
identityfile ~/.ssh/my_idrsa #管理员登陆服务端使用的密钥
b. 设置config的访问权限
chmod 600 .ssh/config
c. clone服务器上的仓库gitolite-admin到管理员账号下,同时验证别名配置是否生效
~$ mkdir tmp
~$ cd tmp
~/tmp$ git clone git:gitolite-admin
如果报错:
Bad owner or permissions on /home/work/.ssh/config
fatal: Could not read from remote repository.
则执行:
chmod 700 /home/work/.ssh
chmod 600 /home/work/.ssh/config