Centos7搭建git服務器

一、 git服務安裝

1.安裝git服務
 # yum info git  //查看 yum 源倉庫的 Git 信息

可以看出,截至目前,yum 源倉庫中最新的 Git 版本才 1.8.3.1,而查看最新的 Git 發佈版本,已經 2.9.2 了。

2.依賴庫安裝
 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
 # yum install gcc perl-ExtUtils-MakeMaker

//卸載低版本的 Git
 # yum remove git

3.下載新版的 Git 源碼包(我放的了  /usr/local/git 的目錄下了,git是我自己mkdir的目錄)
 # cd git
 # wget https://github.com/git/git/archive/v2.9.2.tar.gz
 # tar -xzvf v2.9.2.tar.gz

4.分別執行以下命令進行編譯安裝,編譯過程可能比較漫長,請耐心等待完成。

# cd git-2.9.2
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install

5.添加到環境變量

# vim /etc/profile  
如果沒有vim,則安裝vim工具 yum install vim

添加這一條: export PATH="/usr/local/git/bin:$PATH"

# source /etc/profile   //使配置立即生效
# git --version  //查看版本號

5.1將git設置爲默認路徑,不然後面克隆時會報錯

 # ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack 

# ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack 

6.創建一個git用戶組和用戶,用來運行git服務

# groupadd git
# useradd git -g git
# passwd git  #參數是用戶名
# su - git  //切換git用戶

【注】最好切換到git用戶 不然後面新建的git倉庫都要改權限

至此,git服務安裝完成!

二、創建證書登錄
添加證書之前,還要做這麼一步:
1.  Git服務器打開RSA認證 。在Git服務器上首先需要將/etc/ssh/sshd_config中的RSA認證打開,即將sshd_config文件中下面幾個的註釋解開:

(1.)RSAAuthentication yes

(2.)PubkeyAuthentication yes

(3.)AuthorizedKeysFile .ssh/authorized_keys

這裏我們可以看到公鑰存放在.ssh/authorized_keys文件中。

2. 我們在/home/git下創建.ssh目錄,然後創建authorized_keys文件,

# cd /home/git/
# mkdir .ssh #新建文件夾
# chmod 700 .ssh 
# touch .ssh/authorized_keys  #新建文件
# chmod 600 .ssh/authorized_keys

3.生成密鑰

(1)、設置用戶名和郵箱

[git@10-255-0-114 ~]$ git config --global user.name '用戶名'
[git@10-255-0-114 ~]$ git config --global user.email '郵箱地址'

(2)、查看是否存在ssh keys

[git@10-255-0-114 ~]$ cd ~/.ssh

若出現“No such file or directory”,則表示需要創建一個ssh keys。

(3)、 創建新的ssh keys

[git@10-255-0-114 ~]$ ssh-keygen -t rsa -C "郵箱"

(4)、測試一下連接

//查看調試信息
[git@10-255-0-114 ~]$ ssh -T -v [email protected] 


以上信息顯示連接github失敗,原因是因爲我們沒有將新生成的密鑰加到我們的gitHub裏面,所以我們需要打開authorized_keys.pub文件,把裏面的內容拷貝到GitHub ,打開鏈接 裏面Setting中的ssh and GPG key中,點擊new ssh key把我們公鑰文件id_rsa.pub的內容粘到key中,title隨意寫,保存即可。

【注】也可以通過 cat ~/.ssh/authorized_keys.pub將公共密鑰輸出到控制檯,再進行拷貝

再次嘗試連接

[git@10-255-0-114 ~]$ ssh -T [email protected]

這是因爲在本地計算機與 GitHub 建立連接的時候,實際上是本機計算機的 ssh-agent 與 GitHub 服務器進行通信。雖然本地計算機有了私鑰,但是 ssh-agent並不知道私鑰存儲在哪兒。因此,要想正常使用祕鑰對,需要先將私鑰加入到本地計算機的ssh-agent 中(添加過程中需要輸入 passphrase)
此時,可以通過

[git@10-255-0-114 ~]$ ssh-add ~/.ssh/authorized_keys

5.如果,上述命令執行後,出現提示
Could not open a connection to your authentication agent.
那麼,

[git@10-255-0-114 ~]$ eval `ssh-agent  -s` 
[git@10-255-0-114 ~]$ ssh-add ~/.ssh/authorized_keys
[git@10-255-0-114 ~]$ ssh-add -l  //查看到當前計算機中存儲的密鑰
[git@10-255-0-114 ~]$ ssh -T [email protected]

如果出現: Hi —! You’ve successfully authenticated, but GitHub does not provide shell access. 表明git服務搭建成功!

禁止Shell登錄

因爲搭建git服務器後通常會建立一個git賬戶,其它人共用這個賬戶來克隆或推送數據到git倉庫中,通常也只需要這個功能,但是如果不加限制,那麼其它人可以通過這個git賬戶登錄到主機,那麼這樣是不安全的,所以需要加以限制,即令git用戶不允許登錄shell,可以編輯/etc/passwd文件,找到類似下面的一行:

git:x:502:502::/home/git:/bin/bash
改爲

git:x:502:502::/home/git:/usr/local/git/bin/git-shell
【注】(個人用的話可忽略)
這樣git這個賬戶就只能用來克隆或者推送數據到git倉庫中了,而不能用它來登錄到主機。
現在 git 用戶只能用 SSH 連接來推送和獲取 Git 倉庫,而不能直接使用主機 shell,因爲我們爲git用戶指定的git-shell每次一登錄就自動退出,嘗試普通 SSH 登錄的話,會看到下面這樣的拒絕信息:

[root@localhost ~]# ssh [email protected]
[email protected]'s password:
Last login: Wed Jun 13 21:52:02 2018
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.25.133 closed.

管理大量用戶使用git權限:gitosis

在/home/git/.ssh文件中有authorized_keys文件,這個文件裏邊存放了需要使用git項目的用戶的公鑰,也就是允許誰可以git你的項目

適用於開發者較少的情況,如果開發者數量達到幾百人的規模時,管理起來十分費力,每次增加或刪除用戶時都必須登錄到服務器上去,而且還缺少必要的權限管理,因爲用戶對所有在/home/git下的git項目都擁有讀寫權限。

其實gitosis這個東西和svnAdmin很像,gitosis是用來管理authorized_keys文件和簡單連接限制的腳本,而svnAdmin也是用來管理大量用戶使用svn的權限的。添加、刪除用戶或設定權限這些工作是通過管理一個特殊的git倉庫來實現的,你只需要在這個倉庫做好相應的設置,然後推送到服務器上,gitosis就會隨之改變策略,聽起來不錯吧。

三、使用git命令把代碼放到github上
1、把本地創建的倉庫,push到github遠程倉庫上
(1)、首先登陸github,創建一個名爲cv-template的repositories,克隆ssh地址;
(2)、創建倉庫目錄:

# cd /home/git
# mkdir cv-template
# cd cv-template
# git init  //初始化git倉庫
# ls -a   //顯示隱藏文件夾.git
操作後,會出現.git目錄,裏面會有相應的文件;

(3)、配置git倉庫的用戶:

# git config --global user.name "github註冊的用戶名"

# git config --global user.mail "github註冊的郵箱"

(4)、添加遠程地址:

# git remote add origin [email protected]:github註冊的用戶名/github創建的倉庫名.git
# vim .git/config     
操作後,.git/config文件內容會出現remote等內容;

(5)、在cv-template倉庫目錄下,創建文件README:

# echo "readme" > README
# git add README  //添加到git可管理文件跟蹤中

(6)、提交到本地倉庫:

# git commit -m 'first commit'   //first commit 只是作爲描述,方便log查詢,不可省略

(7)、再push到遠程倉庫上

# git push -u origin master
# git push -f origin master  //強制上傳代碼到github,解決衝突常用的方式

(8)、查詢git提交日誌

# git log

(9)、查看git狀態

# git status

【注】如果後面又對本地倉庫中添加了一些代碼文件,可以通過以下命令提交:

# cd cv-template
# git add .   
add後面加了一個點,是想要提交所有文件,如果想提交指定的文件,可以寫文件名
# git commit –m “NowToDo_v1.0版本信息”
# git push -u origin master

2、本地沒有創建倉庫,而在github上創建了一個test空倉庫
(1)、將遠程的空倉庫克隆到本地:

# cd /home/git
# git clone [email protected]:賬號名/test.git
執行後會在當前目錄生成一個github遠程倉庫名稱的目錄,再進入這個目錄裏面會自動創建.git目錄;

(2)、配置git全局參數:

# git config --global user.name 'github註冊的用戶名'
# git config --global user.email 'github註冊的郵箱'
# git congit --list   //查看git配置參數

(3)、添加git跟蹤文件:

在當前目錄裏面,寫代碼例如:在其目錄下添加文件readme.txt
# git add readme.txt

(4)、提交到倉庫管理器中:

# git commit -m '提交的信息標籤'

(5)、把本地倉庫中的文件提交到github遠程倉庫中:

# git push origin master

在github上可驗證文件是否存在。

至此, git服務器的安裝,測試結束。
 

發佈了25 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章