1. 程式人生 > >在linux(CentOS)上搭建git伺服器和配置gitolite許可權管理

在linux(CentOS)上搭建git伺服器和配置gitolite許可權管理

什麼是git伺服器?我覺得其實就是集中存放git倉庫的伺服器,只不過這些git倉庫要對外開放,讓其他人來連線和push程式碼。

當前伺服器上集中管理的git倉庫不是使用git init來建立的,而是使用git --bare init來建立的空白倉庫,建立很簡單,關鍵是如何管理和配置這些訪問倉庫的使用者和訪問的全縣什麼的。 其實我發現只要配置上gitolite,就可以相當於配置了一個git伺服器

   前置配置

       一、檢測並安裝git

       git的安裝,可以百度一下很簡單在,這裡就不多說了

       git安裝好之後,在第三步你想要管理的賬號上執行下邊命令,主要是這設定一下使用者資訊,方便git commit時git附帶打上這些資訊,以供記錄

git config --global user.name "yourname"  
git config --global user.email "[email protected]"

       二、建立一個git使用者,這個git使用者算是一個其他使用者訪問git的一個入口

       #git使用者並使用/bin/bash作為登陸shell.

       #在這裡說一下有些教程可能會說設定git使用者的shell為/usr/bin/git-shell為git使用者的登陸shell.

       #在我試驗下,使用git-shell可以作為簡單的使用,即建立一個倉庫,讓其他人連線上,這是可以的。但是設定這個是無法使用gitolite,應為這個shell不支援普通的命令   

useradd -m git -s /bin/bash
#設定密碼 
passwd git

       三、建立你想要管理git倉庫的使用者的sshkey.我這裡是root使用者。

       假如這個使用者根目錄下已經村子.ssh檔案和id_rsa和id_rsa.pub則可以忽略這一個步驟

       建立祕鑰很簡單,執行ssh-keygen命令,然後一直空格即可(前提是你當前登入使用者要是root)。當然這個是建立簡單的祕鑰,你如果要安全性高的,可以去百度一下如何使用ssh-keygen.

ssh-keygen

   安裝和配置gitolite

       此處提前注意一下,加入你用root使用者在git使用者的根目錄下建立了一些檔案,請務必將這些檔案的所有者設定為git即執行chown -R git:git filePath  #-R命令是指同時將檔案目錄下的檔案也設定所有者為git

       如果忽略這一點,就會出現你及時配置好,但是使用的時候報錯誤,簡單的錯誤提示許可權不夠,複雜的可能你要百度查一下才知道是這個問題,

       筆者就是沒人提醒,按照網上的教程寫著執行chown,但是不明白為什麼,生搬硬套老是出錯。

       登陸git使用者(su git或者ssh連線git使用者)

      1、git clone git://github.com/sitaramc/gitolite # 獲取gitolite的原始碼  
      2、mkdir -p $HOME/bin  #為gitolite的二進位制檔案生成建立目錄  
      3、gitolite/install -to $HOME/bin  # 編譯生成安裝檔案 

       4、安裝和初始化gitolite,

       這一步有兩點需要注意,

       第一點:必須用git使用者來執行,不要想著使用sudo,因為gitolite會在執行命令的根目錄建立一個repositories資料夾,加入你使用sudo的話,實際是將這個資料夾建立到了root使用者上

       第二點:gitolite初始化時需要設定一個用來管理gitolite的使用者,實際就是指定這個使用者的公鑰,這個再初始化之後,你就可以使用root使用者來管理gitolite. 這一項之後你可以再更改的。

       將管理使用者的公鑰(.ssh/id_rsa.pub檔案)複製到/temp下,並改為admin.pub
       $HOME/bin/gitolite setup -pk /tmp/admin.pub # 安裝並初始化,指定admin.pub公鑰檔案對應的使用者為超級管理員  

       到此gitolite就已經配置和安裝好了,之後就是如何使用gitolite來管理倉庫了。

   使用gitolite管理許可權和管理git倉庫

       你要用它來進行管理,那還需要一定的操作。這裡說一下,gitolite安裝後本身是一個特殊的git版本庫——gitolite-admin,分散式的進行修改,然後通過push的方式提交,其會通過鉤子指令碼執行許可權更新。在上述步驟的最後一步執行完後會在git使用者的根目錄下建立一個repositories資料夾(這個資料夾就是以後存放git倉庫的地方)並且gitolite自動生成了兩個版本庫:gitolite-admin.git和testing.git,其中的gitol-admin.git就是那個特殊的神奇版本庫。所以,接下來我們要做的,就是回到你剛剛指定的超級管理員賬戶的電腦跟賬戶下,clone出gitolite-admin這個特殊的git版本庫(當前情況下,只有該超級管理員賬戶可以clone並更新gitolite-admin這個版本庫),然後根據自己的需要對其進行配置(如新增更多的管理員賬戶、新增新的版本庫併為不同的使用者指定許可權)


su root# 回到指定的超級管理員賬戶  
git clone [email protected]:gitolite-admin.git # clonegitolite-admin這個特殊的版本庫

       如果上面的步驟都成功了的話,應該可以檢視到有一個gitolite-admin的資料夾,資料夾下有兩個目錄conf、keydir
       如果你回到git使用者,檢視repositories目錄(如果之前建立倉庫時,建立的資料夾不是repositories,gitolite會自動建立這個資料夾,並將該資料夾作為預設訪問時的預設路徑),目錄下就會多了gitolite-admin.git與testing.git兩個版本庫。有沒有發現,這次clone的時候,沒有指定決定路徑,這一切gitolite已經自動幫你搞定了:預設路徑是/home/git/repositories,許可權控制是隻有當前的超級管理員使用者可以訪gitolite-admin和testing兩個版本庫。如果你在repositories下邊在建立一個空白倉庫,比如helloworld

       現在使用git clone [email protected]:helloworld試圖clone  
       FATAL: R any helloworld id_rsa DENIED by fallthru  
       (or you mis-spelled the reponame)  
       fatal: The remote end hung up unexppectedly   
       要繼續訪問這個專案,需要將這個專案新增到gitolite的許可權控制內,下面演示一下為當前的超級管理員使用者指定之前建立的helloworld測試版本庫的讀寫許可權(可讀可寫),以此演示gitolite指定許可權的一般流程:
       1、將需要指定許可權的使用者的ssh公鑰檔案,存放在gitolite-admin版本庫的keydir目錄下(如果提交的都是id_rsa.pub,可以將其重新命名為該使用者的id或者名稱,同時也推薦這樣重新命名,以明示哪個公鑰檔案是哪個使用者的),因為我們初始化時,gitolite已經將該超級管理員的公鑰檔案自動拷進去了,所以省略此步驟
       2、編輯conf目錄下的gitolite.conf檔案,新增helloworld版本庫管理組,為超級管理員指定讀寫許可權(RW+,具體的許可權定義,參考gitolite官方文件)

repo helloworld  
RW+  =   id_rsa  

       3、commit到本地
git commit -am 'add the helloworld repo and add RW+ to id_rsa'

       4、push到git倉庫
git push

       如果push成功,當前超級管理員使用者應該就可以成功clone helloworld版本庫,並進行新增、刪除、修改與push等操作了。

       最後需要指一下,gitolite本身回在你git commit東西到gitolite-admin倉庫的使用時執行鉤子指令碼來更新許可權,但是有的時候,這個鉤子他又不起作用,即沒有跟對你的操作來更新許可權。

       這個情況下,如果你新增一個test使用者,並且將test的公鑰加入keydir和配置gitolite時,使用git clone [email protected]:helloworld時會報錯誤,錯誤訊息是不存在helloworld倉庫

       這時因為你設定的這個使用者的公鑰,沒有被鉤子捕捉到並更新資訊,只能你自己來做了,其實也很簡單,就是開啟git使用者.ssh/authorized_keys檔案的內容,在裡邊仿照內容加以一句資訊

       我的檔案原有資訊如下

command="/home/git/bin/gitolite-shell admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAppSWxxxxxb8V4UZkNRVTZxxxxxxxOItP0iMVj9xssCKJamq97eAnqCSe4xqgHuAN7WFSchbzPNPYP5/KyPzZ/mMkYiWNY4OHNPhrD1MjzPDJGSpRL3UEJ2PyPQBJNUEhpFhBvG+4+lTAcF76jYDFewY8Oi6OW2Ka9v9QFn69oJ3pOSG/kTkbURYKfpZpSuy3RkpbfHaxOi1TT0X8OvutlYtHrj8/PwJEJ1I3kFVTLCDTuMqU/7h8aCN2OIlZvTdkuDx4G/l30cm1V4WuqJSoaB/MOMHhjm9CQJ52TuMtW92QVJ7JdKaXbG3XuK9F/[email protected]

       這裡邊的每一行就是鉤子本來需要去做的,你自己仿照上邊格式的將test使用者的公鑰加上去,問題就解決了。這裡注意一下 gitolite-shell 後邊的引數,我貼出來的是admin,即公鑰對應的gitolite許可權管理的使用者名稱,和gitolite.conf裡的使用者名稱。

相關推薦

linuxCentOS搭建git伺服器配置gitolite許可權管理

什麼是git伺服器?我覺得其實就是集中存放git倉庫的伺服器,只不過這些git倉庫要對外開放,讓其他人來連線和push程式碼。 當前伺服器上集中管理的git倉庫不是使用git init來建立的,而是使用git --bare init來建立的空白倉庫,建立很簡單,關鍵是如何管

linuxcentos安裝mysql教程,為需要遠端登入的使用者賦予許可權

最近把之前學生時代的win server換成了linux(centos)系統,因為win對於部署一些專案時候比較麻煩,直接入正題 1、準備階段 我使用xshell工具管理伺服器,相應下載和安裝自行百度 2、安裝 接下來主要介紹Linux下使用yum安裝MySQL,以及啟動、登

linuxcentos快捷搭建

搭建vpn的方式很多,但是我推薦l2tp,它最大的優勢在於跨平臺、無需額外的客戶端;效果也並不比紙飛機、openvpn差. 直接執行現成的命令指令碼即可: wget https://github.com/PMJ520/tools_public/blob/master/vp

linuxcentos安裝mysql教程

最近把之前學生時代的win server換成了linux(centos)系統,因為win對於部署一些專案時候比較麻煩,直接入正題 1、準備階段 我使用xshell工具管理伺服器,相應下載和安裝自行百度 2、安裝 接下來主要介紹Linux下使用yum安裝MySQL,以及啟動、登入和遠端訪問MyS

如何在LinuxCentOS7環境搭建 Jenkins 伺服器環境

    最近,我自己要親手搭建一套完整的企業級 CI/CD 環境,這個環節裡面涉及了很多內容,沒有辦法把這麼多的內容都放在一篇文章裡,所以 Jenkins 的安裝和Java 的 JDK 安裝我就是分了兩篇文章來寫的。而且這套環境中也包含 Docker 容器,涉及的東西不少,有些東西,自己也是第一次遇到,所以就

物聯網倉儲系統—環境搭建—BOA 伺服器 SQLite3 移植

一、專案環境介紹:1、Ubuntu 12.04 發行版2、GCC 交叉編譯工具鏈(版本 4.5.1)3、U-boot-2010.034、FS4412 開發板(ARM Cortex-A9 核心)5、FS_

LinuxDebian中的Samba伺服器配置

  配置Samba伺服器分為4步: 1.apt-get install samba (安裝) 2.建立使用者 ( 注意:該使用者是系統中已經存在的使用者,以debian為例) 在系統中建立test使用者debian~:# useradd -m test 增加samba使用

Linuxcentos下,安裝ApachePHP環境

1.Apache安裝 # yum install httpd (centos之下,Apache的名字叫httpd,和Apache的主程式 httpd.exe 同名) 2.開啟並測試Apache (1)先確保,雲伺服器的80埠,是允許外網訪問的

LinuxCentOS SVN伺服器搭建+同步更新+多版本庫+開機啟動

一、安裝步驟如下: 1、yum install subversion 2、輸入rpm -ql subversion檢視安裝位置,如下圖:   3、建立svn版本庫目錄 mkdir -p /var/svn/svnrepos 4、建立版本庫 svnadmin

[PXE] linuxcentosPXE服務器搭建,安裝,啟動及pxe協議詳解

delet 不依賴 ons cat dhcp服務器 ftp local 子網 toc 本章Blog相關Linux知識點 工作環境中,想要安裝Linux但是計算機沒有光驅,或者是有大批量的計算機需要同時安裝Linux,就需要通過部署環境PXE+DHCP+TFTP+HTT

linuxcentos搭建.net core 執行環境

 總的來說,非常簡單,我記錄一下; 1、開啟https://www.microsoft.com/net/download?initial-os=linux 這裡“Instal .NET Core SDK”和“Install .NET Core Runtime”的區別是,前者可以直接在伺服器使

伺服器Centos配置Apache環境

1、清除系統垃圾 yum clean all 2、執行系統更新 yum -y update 3、安裝apache yum -y install httpd 4、設定Apache的開機自啟 systemctl enable httpd.service 5、建立開

Linux搭建git伺服器

這裡我使用的是centos伺服器 1、安裝git yum -y install git 2、新新增使用者git adduser git 3、進入/etc/passwd將 git:x:1001:10

LinuxCentos伺服器安裝MySQL 5.7

Linux(Centos)伺服器安裝MySQL 5.7 MySQL的安裝方式有多種,但個人覺得這種方式比較簡單。前提你的Linux可以上外網。 // 檢查系統是否裝有mysql yum list installed | grep mysql // 刪除mysql及其依賴 yum -y remove

centos搭建GIT伺服器

前言:作為目前世界上最先進的分散式版本控制系統,簡單來說就是高階大氣上檔次!程式碼託管倉庫有兩種型別。遠端倉庫和本地倉庫;兩者沒啥不同,純粹為了7*24小時開機並交換大家的修改。GitHub就是一個免費託管開原始碼的遠端倉庫。但是對於某些視原始碼如生命的商業公司來說,既不想公開原始碼,又捨不得給GitHub交

LinuxCentOS下,設定NAT,訪問內網伺服器

首先,要開啟Linux核心的轉發資料包的功能,也就是將/proc/sys/net/ipv4/ip_forward裡的值設定為1。 可以這樣做:# echo 1 > /proc/sys/net/ipv4/ip_forward 重啟網路服務(service network

Ubuntu中Git伺服器搭建

git伺服器搭建過程 參考網上資料搭建git伺服器過程記錄 如下: 基本需求 硬體需求:一臺Ubuntu或者debian電腦(虛擬機器),能通過網路訪問到。 軟體需求:git-core, gitosis, openssh-server, openssh-client, Apa

linuxcentos系統架設asp.net網站

本實驗在虛擬機器下測試通過 虛擬機器IP 192.168.199.146 安裝好 CentOS 6.5 之後 1、更新系統 在命令列下執行 yum –y update 2、安裝必要的軟體 yum -y install gcc gcc-c++ bison pkgconfig glib2-devel ge

linux centos下安裝 mongodb v3.2 筆記

安裝 i686 src gpa logs http 權限 fig 說明 1.下載mongodb 默認都是64位的,這個有點尷尬。。。 64位系統下載地址: https://www.mongodb.org/dl/linux/x86_64-debian81?

linuxcentos下安裝ffmpeg

視頻 prior mir php 源碼編譯 category 緩存 www 一個 【備忘】windows環境下20行php代碼搞定音頻裁剪 上次我的這篇文章將了windows下web中如何操作ffmpeg的文章,這裏則記錄下linux(centos)下的安裝 首先:我花了中