gitolite – 搭建授权管理

平时在github上创建仓库、推拉代码、创建 Pull/Merge Request、发起 Issue 。
如果是本地代码 git 只能跟踪的代码信息,无法完成如上操作。本文介绍利用 gitolite 搭建本地git存档信息平台,可以实现类似功能。


提示:此文章仅为搭建gitolite,下一篇为 gitote 托管 Android 代码仓库repo。

文章目录

  • gitolite -- 搭建授权管理
  • Gitolite 实现目标
  • 1. 创建gitolite 管理用户
  • 2. 安装 gitolite
    • 2.1 gitolite 管理服务端
    • 2.2 gitolite 管理客户端
    • `Tips 同步代码异常`
  • 总结

Gitolite 实现目标

a) 搭建本地git 或 repo 仓库,拉去云仓,管理本地代码
b) 用最小的配置完成安全的权限管理;管控连接代码仓授权密钥
c) 用户密钥一对一,根据分配用户在各个代码仓不同权限


1. 创建gitolite 管理用户

如果使用当前用户可以跳过此步骤;如果新建用户的话,建议用户为 git,方便代码维护下载。此前因新未新建用户,搭建完成后使用 URL git@IP/xxx.git 始终无法同步代码,原因为ssh 连接用户并非 gitolite 管理用户名。

sudo useradd git

如果分配空间指定目录 给用户 git, 例如 /build 目录

sudo useradd -d /build -m -s /bin/bash git

设置用户密码,并切换用户

sudo passwd
su - git

2. 安装 gitolite

2.1 gitolite 管理服务端

安装ssh git keychain (私钥管理工具)

sudo apt-get install openssh-server git keychain

克隆gitolite安装包

cd ~
git clone git://github.com/sitaramc/gitolite

创建安装bin目录 并安装gitolite

mkdir -p ~/bin
./gitolite/install -to ~/bin

用户下重新生成一个密钥,生成密钥用作 gitolite 服务端管理员密钥

ssh-keygen -t rsa -f ~/.ssh/git

设置刚生成密钥为管理员密钥。如果使用公钥路径为~/.ssh/git.pub,如果使用私钥 ~/.ssh/git

~/bin/gitolite setup -pk ~/.ssh/git.pub
已初始化空的 Git 仓库于 /home/hasee/repositories/gitolite-admin.git/
已初始化空的 Git 仓库于 /home/hasee/repositories/testing.git/

此时gitolite 配置成功。此时用户目录生成projects.list(项目列表) repositories(代码仓库)。如果出现如下错误,说明你在使用和登录用的同一个key。

WARNING: keydir/git_key.pub duplicates a non-gitolite key, sshd will ignore it

a) 前面的设置一般情况下是通过ssh连接到服务器,故需要用户名(即git)和 key(通过ssh-keygen 命令生成),因为此key可直接登录服务器,不适合做git管理员。
b) ~/.ssh/authorized_keys 中,git授权的格式和ssh授权的格式不同,做了扩展,无法通用。
想回退上面的命令发现失效,按照文档说的去做(文档写的是直接重新执行,就会覆盖)也是失效的,删掉gitolite,重新操作一遍。
主要的配置在 $HOME/.gitolite 和 $HOME/.gitolite.rc 连同repositories 需要一并删掉,否则还是会出现上面的错误。

此时查看 .ssh/authorized_keys 授权文件。

$ cat /home/git/.ssh/authorized_keys
ssh-rsa ************************************** git@namenode
# gitolite start
command="/home/git/gitolite/src/gitolite-shell git_admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa ***************************** git@namenode
# gitolite end

2.2 gitolite 管理客户端

客户端的key需要是git的管理员key,即上面的 git.pub。
clone时git仓库需要写相对于repository的相对路径。格式为 ssh://userName@IP:port/gitolite-admin.git。
以本机用户(git)获取管理终端为例

cd ~
git clone git@127.0.0.1:gitolite-admin.git

以testing仓库为例添加新 用户user。repo testing 用户被授权的代码仓,R为权限,W为写权限。
修改conf/gitolite.conf 文件,添加 user用户仓库读写权限。

diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index ae1dc08..96517a3 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -1,2 +1,8 @@
repo xxx
-    RW+     =   git
+    RW+     =   git user

将用户密钥(user.pub)拷贝到 gitolite-admin/conf/,提交时需要一并提交。
修改提交到远程分支后,需等待gitolite遍历完成方可生效。

Tips 同步代码异常

首次使用密钥未验证无法同步

The authenticity of host '192.168.33.22 (192.168.33.22)' can't be established.
ECDSA key fingerprint is SHA256:Hp2H8uiwD1LAcFECVy/T94KwxZ6rsasrj+k5hwtmDWk.
Are you sure you want to continue connecting (yes/no)?
ssh -Tvv git@localhost #(localhost 为 repository 服务器 ip)

未配置 git 信息导致无法同步

Traceback (most recent call last):File "/home/pps/.repo/repo/main.py", line 531, in <module>_Main(sys.argv[1:])File "/home/pps/.repo/repo/main.py", line 507, in _Mainresult = repo._Run(argv) or 0File "/home/pps/.repo/repo/main.py", line 180, in _Runresult = cmd.Execute(copts, cargs)File "/home/pps/.repo/repo/subcmds/init.py", line 404, in Executeself._ConfigureUser()File "/home/pps/.repo/repo/subcmds/init.py", line 298, in _ConfigureUsername  = self._Prompt('Your Name', mp.UserName)File "/home/pps/.repo/repo/project.py", line 784, in UserNameself._LoadUserIdentity()File "/home/pps/.repo/repo/project.py", line 797, in _LoadUserIdentityu = self.bare_git.var('GIT_COMMITTER_IDENT')File "/home/pps/.repo/repo/project.py", line 2747, in runner(self._project.name, name, p.stderr))
error.GitError: manifests var:
*** 请告诉我你是谁。运行git config --global user.email "you@example.com"git config --global user.name "Your Name"来设置您账号的缺省身份标识。
如果仅在本仓库设置身份标识,则省略 --global 参数。

按照 log 提示配置 email 和 name 即可。

总结

以上为 gitolite 服务端和授权管理终端待建过程。

gitolite 搭建 Android仓库(一)相关推荐

  1. gitolite 搭建Android仓库(二)

    gitolite – 导入 Android 代码镜像仓库 平时在github上创建仓库.推拉代码.创建 Pull/Merge Request.发起 Issue . 如果是本地代码 git 只能跟踪的代 ...

  2. gitolite 搭建Android仓库(三)

    gitolite – 代码仓库管理 前两文 gitolite 代码仓库基本构建完成,使用中会遇到要新建.删除分支仓库.或者增加外部代码仓库,问题来咯.如何在现有基础上构建新代码仓? 如何在现在代码仓中 ...

  3. Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库

    Android基础新手教程--1.5.2 Git之使用GitHub搭建远程仓库 标签(空格分隔): Android基础新手教程 本节引言: 在上一节中.我们学习了怎样使用Git.构建我们的本地仓库.轻 ...

  4. 最新jfrog artifactory搭建Android本地仓库教程

    提高gradle编译速度 jfrog artifactory本地仓库搭建 前言 什么是本地仓库 jfrog本地仓库搭建 更改项目仓库地址 解决Received status code 401 from ...

  5. Android Studio(13)--- Git之使用GitHub搭建远程仓库

    Git之使用GitHub搭建远程仓库 在上一节中,我们学习了如何使用Git,构建我们的本地仓库,轻松的实现了版本控制以及代码还原,修改日志查看等:读者肯定不满足与本地是吧,假如是多个人一起来开发一个程 ...

  6. Android 应用开发(30)---Git之使用GitHub搭建远程仓库

    Git之使用GitHub搭建远程仓库 本节引言: 在上一节中,我们学习了如何使用Git,构建我们的本地仓库,轻松的实现了版本控制以及代码还原,修改日志查看等:读者肯定不满足与本地是吧,假如是多个人一起 ...

  7. 使用Gitolite搭建Gitserver

    Gitolite是一款Perl语言开发的Git服务管理工具.通过公钥对用户进行认证.并可以通过配置文件对些操作进行基于分支和路径的精细控制. Gitolite採用的是SSH协议而且使用SSH公钥认证. ...

  8. 使用Gitolite搭建Git服务器

    Git服务的管理工具,主要有如下几种. Gitosis- 轻量级, 开源项目,使用SSH公钥认证,只能做到库级的权限控制.目前项目已经停止开发,不再维护. Gitolite - 轻量级,开源项目,使用 ...

  9. 基于gitolite搭建轻量级git服务器

    原文地址:http://lisongze.com/2018/09/01/gitolite-gitserver/ or http://lisongze.cn/2018/09/01/gitolite-gi ...

最新文章

  1. linux查看mq死信队列,linux下postgresql 一主多从、redis集群、rabbitmq等环境搭建 (九) xa-rdmp-archiving 从数据库的安装...
  2. 拿访问网站用户IP 纯JS实现
  3. oracle导数卡死,oracle-审计导数
  4. springboot细节挖掘(配置Swagger2)
  5. Kettle 数据迁移
  6. 《犯罪心理》第一至第六季 名人名言 全
  7. 中富之命能有多少钱_算命中富 算命的说我是中富命,谁可以帮忙解释下
  8. L13 操作系统的这棵树
  9. centos7 安装7z压缩命令
  10. 【总结】大学四年来,用过的一些网站整理
  11. android现状及发展趋势,2021年Android手机现状分析
  12. 易安卓读取HTML,易安卓(E4A)怎么保存设置?
  13. 后端框架之Flask--初识
  14. 世界五百强中国上榜公司首次超过美国;现代汽车发布电动汽车品牌IONIQ | 美通企业日报...
  15. 回顾中国的开源浪潮(转载)
  16. 一个E500曲线坐标计算程序
  17. 求助!spyder beautifulsoup4显示错误:AttributeError: 'HTMLParserTreeBuilder' object has no attribute 'initia
  18. PS4二战在线游戏连接不上服务器,使命召唤14:二战打不开怎么办 游戏无法运行解决办法汇总...
  19. 456. 132模式
  20. 在Java中使用临时文件/文件夹

热门文章

  1. 两个数据库进行数据比对(DataTable对比)
  2. oracle 中in函数的使用
  3. python输入姓名专业班级_python自动生成姓名
  4. (整蛊)一段好玩的java代码
  5. java 中封装类有哪些_java中封装类(一)
  6. Solidworks怎么卸载干净?
  7. Mac使用技巧总结-如何独立设置Mac触摸板方向和鼠标滚轮方向?
  8. 美的使用鸿蒙系统,美的全面接入“鸿蒙”,今年将完成全品类覆盖
  9. MAC下的切图神器!SLICY使用说明
  10. 思杰(Citrix)南京笔试(暑期实习)