10分鐘學會linux(ubuntu)安裝git服務器

引言

因需要管理項目,需要用到git,不想使用一些商用的git服務商,所以自己搭建一個簡單的git服務器,用於管理項目。

環境

  • linux 服務器:ubuntu
  • git 安裝地址,下載地址(https://git-scm.com/download/linux)

安裝git命令

參考:ubuntu16.04 搭建git服務器

搭建Git服務器

ubuntu16.04 搭建git服務器簡單教程

先明確一下概念,git通過ssh協議來實現,那些人可以pull和push服務器的項目,其他的人是沒有權限的訪問的。那服務器就需要驗證客戶端是否有權限,ssh提供了兩種方式,一種是基於口令的驗證,就是賬號密碼。一種是基於密匙的驗證,需要依賴密匙。下面我們分爲 客戶端和服務器操作:

git服務端:

-- 安裝git,還要安裝 openssh ,因爲git需要通過ssh協議來在服務器與客戶端之間傳輸文件
sudo apt-get install git-core openssh-server openssh-client   
如果提示有問題,可以先使用 apt-get 更新
sudo apt-get update
查看git版本  git version
-- 創建一個git管理員用戶,賬號和密碼,增加git用戶會生成文件夾 /home/git
sudo useradd -m git
sudo passwd git
-- 創建ssh證書認證文件  (新建的用戶可能使用不了 sudo ,需要修改配置,參考:https://www.cnblogs.com/zox2011/archive/2013/05/28/3103824.html)
sudo mkdir /home/git/.ssh
sudo touch /home/git/.ssh/authorized_keys
-- 修改authorized_keys 文件的權限,之後要對其進行修改,將用戶的公共密匙,寫入到這個文件中
sudo chmod 777 /home/git/.ssh/authorized_keys
 

git客戶端:

git客戶端訪問git服務端,需要依靠密匙,也就是你必須爲自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。具體概念可以參考:https://baike.baidu.com/item/SSH/10407

首先安裝一下git客戶端在你的本機上,我是用的windows,下載地址: https://git-scm.com/download/win。

 
-- 安裝完成後,右鍵菜單中選擇 Git Bash Here 生成客戶端的公鑰
ssh-keygen  -t  rsa  # 這裏會提示輸入密碼,我們不輸入直接回車即可
 
執行過程可以看到生成的位置,我的是在  C:\Users\Administrator\.ssh
目錄中有 id_rsa id_rsa.pub known_hosts
 
 

git 服務器:

 
-- 將生成的 id_rsa.pub 拷貝到服務器,可以使用 wincp 等工具
-- 查看id_rsa.pub 內容
cat  ./id_rsa.pub
-- 將內容追加到 /home/git/.ssh/authorized_keys 這個文件中
echo "上一步複製的公鑰內容" >> /home/git/.ssh/authorized_keys
-- 修改authorized_keys文件的權限
sudo chmod 700 /home/git
sudo chmod 700 /home/git/.ssh
sudo chmod 600 /home/git/.ssh/authorized_keys
sudo chown -R git:git /home/git
sudo chown -R git:git /home/git/.ssh
sudo chown -R git:git /home/git/.ssh/authorized_keys
-- 創建一個測試的代碼倉庫,選擇一個目錄作爲git倉庫位置,假設是 /home/test 進入這個目錄
cd /home
mkdir test
sudo git init --bare test.git
-- Git就會創建一個裸倉庫,裸倉庫沒有工作區,因爲服務器上的Git倉庫純粹是爲了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾。然後,把owner改爲git:
sudo chown -R git:git test.git
-- 禁用shell登錄
出於安全考慮,第二步創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改爲:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

git 客戶端:

-- 找到一個目錄,用於clone 剛纔的test倉庫
-- 在目錄中,鼠標右鍵,選擇 Git Bash Here 輸入
git clone git@服務器ip:test.git
出現錯誤,就輸入精確位置
git clone git@服務器ip:/home/test/test.git
-- 成功後,就能看到clone 下來的項目了
 

到這裏,就結束了。 之後那些用戶需要連接git服務器,就把這個人的公鑰內容,再追加到authorized_keys 這個文件中就可以了。

管理公鑰、管理權限

如果團隊很小,把每個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys文件裏就是可行的。如果團隊有幾百號人,就沒法這麼玩了,這時,可以用Gitosis來管理公鑰。

有很多不但視源代碼如生命,而且視員工爲竊賊的公司,會在版本控制系統裏設置一套完善的權限控制,每個人是否有讀寫權限會精確到每個分支甚至每個目錄下。因爲Git是爲Linux源代碼託管而開發的,所以Git也繼承了開源社區的精神,不支持權限控制。不過,因爲Git支持鉤子(hook),所以,可以在服務器端編寫一系列腳本來控制提交等操作,達到權限控制的目的。Gitolite就是這個工具。

下面來說一下怎麼安裝Gitosis ,因爲網上很多例子都有這個,在最開始我是不知道的,搭建這才發現這個是用來管理公鑰的。

參考:ubuntu16.04 搭建git服務器

gitosis 搭建git服務器

我把這篇文章的命令,記錄下來,只是有些地方,我多解釋下。

-- git-core是git版本控制核心軟件,安裝openssh-server和openssh-client是由於git需要通過ssh協議來在服務器與客戶端之間傳輸文件
$ sudo apt-get install git-core openssh-server openssh-client
-- 安裝python的setuptools和gitosis,由於gitosis的安裝需要依賴於python的一些工具,所以我們需要先安裝python的setuptools
$ sudo apt-get install python-setuptools
$ git clone https://github.com/res0nat0r/gitosis.git   #中間兩個爲零
$ cd gitosis/
$ sudo python setup.py install
-- 創建git管理員賬號,一般會創建文件夾 /home/git
$ sudo useradd -m git
$ sudo passwd git
-- 配置git賬號名和郵箱
$ git config--global user.name "myname"
$ git config--global user.email "[email protected]"
-- 配置gitosis,需要用到客戶端生成ssh公鑰來初始化gitosis,爲了管理方便,我同時把這臺服務器當做服務器和客戶端
ssh-keygen -t rsa   # 一直回車
-- 將生成的id_rsa.pub 複製到 /home/git 下面
cp /root/.ssh/id_rsa.pub  /home/git
-- 用這個key來初始化git倉庫
$  su  git  # 輸入密碼,切到git用戶
$  sudo chmod a+r /home/git/id_rsa.pub
$  sudo -H -u git gitosis-init < /home/git/id_rsa.pub
 
這樣會在/home/git下面生成gitosis和repositories兩個目錄,repositories即爲存放公共庫的目錄,裏面有gitosis-adgitosis.git的倉庫,通過gitosis-admin.git倉庫來管理一些配置文件的,如用戶權限的管理。
# 這裏也就說,我們要通過gitosis-admin.git倉庫來管理,用戶權限。
-- 確保/home/git/repositories/gitosis-admin.git/hooks/post-update具有執行權限(755)。
~git$ sudo chown git:git /home/git/repositories
~git$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
~git$ sudo chmod 755 /home/git/repositories
-- 使用gitosis管理用戶操作項目的權限,我們先將剛纔 gitosis-admin.git 克隆下來
$ mkdir gitadmin
$ cd gitadmin/
$  git clone git@loaclhost:gitosis-admin.git
# 若報錯,可以嘗試全路徑,
$  git clone git@loalhost:/home/git/repositories/gitosis-admin.git
 
clone後,gitosis-admin有 gitosis.conf 文件 和 keydir 目錄
# keydir目錄: 存放所有需要訪問git服務器的用戶的ssh公鑰,各個用戶按照前面提到的辦法生成各自的ssh公鑰文件後,把所有人的ssh公鑰文件按名字重新命名一下,然後拷貝到keydir目錄下,例如,lisi.pub,  zhangsan.pub ,若lisi爲管理員機器的ssh key
 
這裏就是說,keydir 就是用來存放,所有客戶端的公鑰
 
# gitosis.conf文件,配置那些倉庫,可以被那些人讀寫
 
這裏就是說,gitosis.conf 用來配置,倉庫中多個項目的權限信息
 
-- 打開gitosis.conf 文件,修改配置
vi ./gitosis.conf
------------------------------------------------------------
[gitosis]
[group gitosis-admin]
writable = gitosis-admin  #倉庫名稱
members = root@VM-56-19-ubuntu #對應keydir下有一個 [email protected] 公鑰文件
 
[group new-project]  # 如果是新的工程
writable = new-project    #倉庫名稱
members = newuser zhangsan lisi #多個用戶用空格分開
------------------------------------------------------------
這個配置文件表達的內容: gitosis-admin 這個工程的組成員有 root@VM-56-19-ubuntu ,這個用戶對 gitosis-admin 倉庫有讀寫權限。
new-project 這個倉庫組成員有 newuser  zhangsan  lisi , 這些用戶對 new-project 有讀寫權限
目前這些配置文件的修改只是在本地,必須推送到遠程的git服務器上才能真正生效。
 
-- 提交併push到Git服務器
$ git add .
$ git commit –am "add new-project and someusers"
$ git push origin master
 
測試一下:
我們將在本機上生成的公鑰,拷貝到 keydir 目錄下,並修改一下 gitosis.conf ,增加一個 倉庫,和用戶,並將這些信息,push 上去。
 
-- 拷貝,我使用的是 wincp,修改pub的名稱爲 gengshuaijia.pub
-- 修改配置
------------------------------------------
[gitosis]
 
[group gitosis-admin]
members = root@VM-56-19-ubuntu gengzi
writable = gitosis-admin
 
[group project1]
members = root@VM-56-19-ubuntu gengshuaijia gengzi
writable = project1
------------------------------------------
-- 提交併push
$ git add .
$ git commit –am "add project1 and someusers"
$ git push origin master
 
-- 創建一個目錄,作爲我們的一個工程
cd /home/git
mkdir project1
cd ./project1
git init
echo "hello world" > Readme.md
git add .
git commit -m "init project1"
git  remote add origin git@localhost:project1.git  # 添加一個遠程倉庫
git push origin master
 
-- 客戶端克隆,右鍵打開 Git Bash Here 輸入
git clone  gengzi@遠程倉庫ip地址:project1.git
 
在文件夾中,應該就能看到這個倉庫的信息了,剩下的操作,跟我們平時操作git 一樣了。

感謝網上各位大神提供的教程。

參考:[git報錯:'fatal:remote origin already exists’怎麼處理?附上git常用操作以及說明。](https://www.cnblogs.com/leaf930814/p/6664706.html)

ubuntu16.04 搭建git服務器簡單教程

搭建Git服務器

gitosis 搭建git服務器

ubuntu16.04 搭建git服務器

linux下如何完全刪除用戶

[xxx is not in the sudoers file.This incident will be reported.的解決方法](https://www.cnblogs.com/zox2011/archive/2013/05/28/3103824.html)

[/etc/hosts文件修改後如何生效](https://www.cnblogs.com/isme-zjh/p/11551568.html)

Ubuntu下搭建Git服務器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章