一、 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服務器的安裝,測試結束。