Git服务的管理工具,次要有如下几种。

  • Gitosis- 轻量级, 开源我的项目,应用SSH公钥认证,只能做到库级的权限管制。目前我的项目曾经进行开发,不再保护。
  • Gitolite - 轻量级,开源我的项目,应用SSH公钥认证,能做到分支级的权限管制。
  • Git + Repo + Gerrit - 超级重量级,集版本控制,库治理和代码审核为一身。可治理大型及超大型我的项目。Android平台应用的就是这种计划。
  • GitLab-是GitHub的开源版本,应用和配置比较复杂,适宜大型团队、资源密集型开发的管理工具

Gitolite应用perl语言编写,保护和更新比拟踊跃,上面测试应用Gitolite搭建Git服务器。

Gitolite的装置

  • 新建用户Git服务器用户gitolite(用于寄存治理Git公钥和仓库)
adduser gitolite
  • 应用gitolite用户登陆服务器
$ su - gitolite明码:
  • 确保家目录~/.ssh/authorized_keys是空的或者不存在

个别新建用户~/.ssh/目录是不存在的。

  • 客户端生成ssh密钥,并将公钥上传到服务器的Gitolite用户家目录下
$ ssh-keygen -t rsa

生成门路会在ssh-kengen执行后给出,也可批改。windows下生成门路默认位于C:/user/用户名/.ssh下。

  • 上传客户端的公钥到gitolite用户家目录下
$ pscp C:/Users/win7hostsver/.ssh/id_rsa.pub gitolite@192.168.1.18:git1.pub
  • 在服务器端下载gitlite
git clone https://github.com/sitaramc/gitolite
  • 创立bin目录,并将gitolite装置到bin目录下
mkdir -p $HOME/bingitolite/install -to $HOME/bin
  • 将上传的公钥git1.pub设置为gitolite的超级管理员
$HOME/bin/gitolite setup -pk git1.pub初始化空的 Git 仓库于 /home/gitolite/repositories/gitolite-admin.git/初始化空的 Git 仓库于 /home/gitolite/repositories/testing.git/WARNING: /home/gitolite/.ssh/authorized_keys missing; creating a new one    (this is normal on a brand new install)

此时,gitolite会初始化两个仓库,同时创立authorized_keys文件

也能够将gitolite命令门路退出到零碎环境变量,这样能够在任何门路应用gitolite
  • 客户端克隆受权治理仓库
$ git clone gitolite@192.168.1.18:gitolite-admin

治理库中有两个目录,conf/keydir/

  1. conf/gitolite.conf 用于Git我的项目配置,拜访权限设置。
  2. keydir/ 用于存储用户的SSH public key(公钥)。

配置Git服务器的我的项目

增加新的Git我的项目仓库到本地

仓库的创立通过编辑gitolite-admin/conf/gitolite.conf即可,而后将配置后的文件上传服务器。

  • gitolite.conf中增加如下两行,新建一个repo1的仓库:
repo repo1    RW+     =   @all

gitolite.conf治理仓库有三种权限, RW+、RW、R

权限能够赋值给@all所有有用户;或增加到\keydir\目录中的公钥对应的某一个用户(公钥文件的名字为RW+值)

git1.pub公钥文件,RW+ = git1

  • 增加并提交批改到gitolite-admin
 git add . git commit -m "added repo1 gave access to all"[master 613f720] added repo1 gave access to all 1 file changed, 1 insertion(+), 1 deletion(-)
  • 推送到近程服务器,gitolite会在服务器创立对应的git仓库
 git pushCounting objects: 8, done.Delta compression using up to 8 threads.Compressing objects: 100% (6/6), done.Writing objects: 100% (8/8), 703 bytes | 175.00 KiB/s, done.Total 8 (delta 1), reused 0 (delta 0)remote: 初始化空的 Git 仓库于 /home/gitolite/repositories/repo1.git/To 192.168.1.22:gitolite-admin   f68d497..613f720  master -> master
  • 服务器端repositories/仓库库目录下会多出一个空仓库repo1
$ ls -al repositories/总用量 20drwx------  5 gitolite gitolite 4096 5月   7 21:10 .drwxr-xr-x 10 gitolite gitolite 4096 5月   7 21:10 ..drwx------  8 gitolite gitolite 4096 5月   7 21:10 gitolite-admin.gitdrwx------  7 gitolite gitolite 4096 5月   7 21:10 repo1.gitdrwx------  7 gitolite gitolite 4096 5月   7 21:10 testing.git
  • 客户端间接克隆
$ git clone gitolite@192.168.1.22:repo1.gitCloning into 'repo1'...warning: You appear to have cloned an empty repository.

本地现有仓库增加到服务器

若本地已有仓库repo2,将其增加到服务器

  • gitolite.conf中配置仓库repo2
repo repo2    RW+     =   git1
新用户要将其公钥增加到/keydir目录
  • 增加、提交和push
git add .git commit -m "added repo2 gave access to git1"git push
  • 本地配置近程服务器
git remote add origin gitolite@192.168.1.22:repo2.git
  • 推送本地仓库
git push origin master

权限规定示例

repo foo    RW+                     =   alice    -   master              =   bob    -   refs/tags/v[0-9]    =   bob    RW                      =   bob    RW  refs/tags/v[0-9]    =   carol    R                       =   dave
  • alice对foo仓库有最高权限,创立、推送、删除、回退、覆写等
  • bob对非master结尾的分支和非v+数字结尾的标签进行创立和推送
  • carol可能创立以v+数字结尾的标签。
  • dave能够克隆和fetch(拉取)

组groups治理

gitolite能够通过用户组的形式进行治理

gitolite.conf相似于变量的模式治理组,并且非常灵活
@admins     =   macken steven@engineers = macken steven wally alice@staff = @admins @engineers@interns    =   ashokrepo secret    RW      =   @staffrepo foss    RW+     =   @admins    RW      =   @interns
  • 同时能够应用正则对分支和标签进行匹配受权
RW int$ = @interns  # @interns组只对以“int”结尾的分支有创立和推送权限RW eng- = @engineers    # @engineers组只对以“eng-”结尾的分支有创立和推送权限RW refs/tags/rc[0-9] = @engineers   # @engineers组只对以“rc[0-9]“结尾的标签有创立和推送权限RW+ = @admins   # @admins组则对仓库有最高权限

遇到的报错

$ git clone gitolite@192.168.1.18:gitolite-adminCloning into 'gitolite-admin'...gitolite@192.168.1.18's password:fatal: 'gitolite-admin' does not appear to be a git repositoryfatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.

如上提醒,须要输出明码。
须要装置openssh,并将gitolite用户增加在sshusers组中,有的服务器可能是ssh组。

SSL(Secure Sockets Layer)安全套接字层,次要用来加密数据传输

SSH (Secure SHell)平安shell,实现对所有传输的数据进行加密。这样“中间人”攻击方式就不可能实现了,并且数据通过压缩,传输速度快。

openssh依赖于openssl,openssl是一个安全套接字层明码库,包含次要的明码算法、罕用密钥和证书封装治理及SSL协定。

OpenSSH是SSH协定的实现,实现过程中,须要用到密钥替换算法,对称/非对称加密算法,Mac算法,随机数算法。会用到OpenSSL的libcrypto库{openssl还有libssl库}。

  • https://www.zhihu.com/questio...
  • https://segmentfault.com/a/11...

计算机领域的Cookbook指的是实用经典案例的意思,是对一些普遍性问题的解决方案的总结和整顿。

参考

  • 应用Gitolite搭建轻量级的Git服务器