配置并使用Git Server With Ubuntu Server & Window & Mac

最近由于工作需要在虛擬機上搭建了一臺Ubuntu Server 16.04作為Git Server,特把配置使用的過程記錄下來,既可以分享又可以備忘,何樂而不為。

在Ubuntu Server上安裝和配置Git以及Gitosis


我們假設(shè)已經(jīng)有了一臺配置好的Ubuntu Server,下面安裝和配置Git需要用到的程序套件:

  1. 安裝 openssh服務(wù)器
sudo apt-get install openssh-server openssh-client

tips:使用git的時候,一般和服務(wù)器通訊使用的是ssh協(xié)議,用ssh的主要優(yōu)點是速度快(傳輸前數(shù)據(jù)會先壓縮,比HTTP快),安全,方便讀寫。

  1. 創(chuàng)建個人公鑰和私鑰
    2.1 在默認(rèn)用戶的主目錄路徑下,運行以下命令,按照提示創(chuàng)建公鑰和私鑰(建議創(chuàng)建的時候使用密碼)
ssh-keygen -t rsa

2.2 默認(rèn)生成2048位,如果需要提高安全級別,也可以通過下面的命令創(chuàng)建公鑰和私鑰

ssh-keygen -t rsa -b 4096

2.3 默認(rèn)情況下,公鑰和私鑰會保存在~/.ssh目錄下

id_rsa  id_rsa.pub  known_hosts

tips:客戶端通過ssh訪問服務(wù)器端的驗證方式一般有兩種,一種是用戶名密碼的方式,一種是使用公私鑰認(rèn)證的方式. 使用公私鑰的方式比較方便,無需每次登錄輸入密碼。

  1. 安裝 git服務(wù)器
sudo apt-get install git-core
  1. 配置 git服務(wù)器
    4.1 創(chuàng)建git服務(wù)器管理用戶
sudo useradd -m git
sudo passwd git

tips:有些人會告訴你出于安全方面的考慮應(yīng)該通過修改/etc/passwd文件禁用git用戶shell登陸,不過如果你像我一樣準(zhǔn)備使用Gitosis進行Git授權(quán)管理的話這一步就可以省略了
4.2 創(chuàng)建git倉庫存儲目錄(同樣,Gitosis在初始化的時候也會創(chuàng)建,所以可以省略)

sudo mkdir /home/git/repositories

4.3 設(shè)置git倉庫權(quán)限

sudo chown git:git /home/git/repositories
sudo chmod 755 /home/git/repositories

4.4 初始化全局設(shè)置

git config --global user.name "yourname"
git config --global user.email "yourname@server"

至此,Git server套件已經(jīng)安裝配置完畢。我們知道,Git是一個分布式的版本控制系統(tǒng),并不像SVN那樣有明顯的Server端和Client端區(qū)別,所謂的Server端也就是一個沒有工作拷貝需求的裸庫(bare repository)。而Git本身的權(quán)限控制是通過~/.ssh/authorized_keys中的公鑰進行驗證和邏輯處理(指定特定command參數(shù),每次驗證好用戶后首先執(zhí)行相關(guān)邏輯,檢測當(dāng)前用戶是否具有某個權(quán)限)實現(xiàn)的,所以與其說Gitosis是一個Git權(quán)限管理系統(tǒng),還不如說它是一個authorized_keys文件管理器。下面我們就來安裝和配置Gitosis需要用到的程序套件:

  1. 安裝python的setup tool
sudo apt-get install python-setuptools
  1. 安裝python的setup tool
cd /tmp
git clone git://github.com/res0nat0r/gitosis.git
cd gitosis
sudo python setup.py install
  1. 配置gitosis,將初始管理員的公鑰拷貝到git服務(wù)器端的/tmp/下,然后通過gitosis在git用戶home目錄下運行如下初始化命令,后面的公鑰(id_rsa.pub)便是gitosis首個管理員的公鑰
cp ~/.ssh/id_rsa.pub /tmp
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
  1. 管理gitosis配置,先su到初始管理員賬號
cd ~
git clone git@hostname:/gitosis-admin.git
cd gitosis-admin/

各用戶將各自的ssh公鑰交給管理員,由管理員將公鑰拷貝到keydir目錄下并修改gitosis.conf文件
tips:公鑰文件里必須為單行,格式類似于 ssh-rsa yoursshpubkey a@server1 ,結(jié)尾的用戶名與gitosis.conf文件中members下的用戶名保持一致

[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = a@server1
[group developers]
writable = helloworld
members = a@server1 b@server2
[group test] 
readonly = helloworld
members = c@server3

這個配置文件表達了如下含義:gitosis-admin組成員有a,該組對gitosis-admin倉庫有讀寫權(quán)限; developers組有a,b兩個成員,該組對helloworld倉庫有讀寫權(quán)限; test組有c一個成員,對helloworld倉庫有只讀權(quán)限。 當(dāng)然目前這些配置文件的修改只是在你的本地,你必須推送到gitserver上才能真正生效。 加入新文件、提交并push到git服務(wù)器:

git add .
git commit -am "add helloworld project and users"
git remote add origin ssh://git@hostname/helloworld.git
git push origin master

至此,服務(wù)器端的Gitosis也已經(jīng)安裝配置妥當(dāng),下面我們分別在Windows和Mac環(huán)境下使用SourceTree作為客戶端使用Git Server。

在Window上配置SourceTree作為客戶端使用Git Server


  1. 生成本機的SSH密鑰
    1.1 使用SourceTree自帶的工具=>創(chuàng)建或?qū)隨SH密鑰
    1.2 選擇SSH-2 RSA類型,在* “Number of bits in a generated key”中可以自定義密鑰的加密位數(shù)
    1.3 點擊
    “Generate”進行生成,生成的過程中需要鼠標(biāo)在界面類不斷滑動輔助隨機生成
    1.4 將私人密鑰保存為
    .ppk格式備用
    密鑰生成工具

    *想要了解更多細(xì)節(jié),可參考Using PuTTYgen, the PuTTY key generator
  2. 將公鑰上傳到Git Server
    參考第一節(jié)里第8條,將生成的公鑰以Gitosis認(rèn)可的格式上傳到keydir目錄,并同時在gitosis.conf文件中進行對應(yīng)的授權(quán),不要忘記push到git服務(wù)器使其真正生效。
  3. 啟動SSH授權(quán)代理
    做到這一步,基本的配置基本就完成了,但最后不要忘記要將1.4中生成的ppk文件加入到Pageant


    系統(tǒng)托盤中的Pageant

    加入密鑰

    現(xiàn)在可以測試一下SSH連接了,如果要求你輸入密碼,那么就說明你的密鑰配置還是有問題,如果報連接關(guān)閉的錯誤(記得嗎?我們在第一節(jié)4.1里說過,Gitosis會自動阻止git用戶的Shell登陸)那就說明配置已經(jīng)成功,你已經(jīng)可以在這臺Windows的SourceTree上正常的使用Git Server了 : )


    It's OK

    Done

在Mac上配置SourceTree作為客戶端使用Git Server


在Mac上生成SSH的過程和第一節(jié)2里類似,需要注意的是沒有Pageant提供的圖形化界面進行SSH代理,需要用到

ssh-add ~/.ssh/id_rsa
// 不想每次重啟都要載入一遍
ssh-add -k ~/.ssh/id_rsa
ssh-add

enjoy

參考引用


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容