一、Git 協議
Git 可以使用四種主要的協議來傳輸數據:本地傳輸,ssh 協議,Git 協議和 HTTP 協議。
Git 使用的傳輸協議中最常見的就是 ssh 了。大多數環境已經支持通過 ssh 對服務器的訪問 ,ssh 也是唯一一個同時支持讀寫操作的網絡協議。另外兩個網絡協議(HTTP 和 Git)通常都是只讀的。ssh 同時也是一個驗證授權的網絡協議;而因為其普遍性,一般架設和使用都很容易。
本文主要介紹如何搭建 ssh 協議的 Git 服務器。
二、在服務器上部署 Git
首先,你需要一台 Linux 器並且擁有 sudo 權限,下面就開始安裝:
1 安裝 git
$ sudo apt-get install git
2 創建一個 git 用戶,用來運行 git 服務
$ sudo adduser git
3 設置訪問權限
有幾個辦法可以讓團隊的每個成員都有訪問權:
- 給每個人建立一個賬戶。反復使用 adduser 並給所有人設定臨時密碼比較麻煩。
- 在服務器上建立一個 Git 賬戶,讓每個需要寫權限的人發送一個 ssh 公鑰,然后將其加入 Git 賬戶的 ~/.ssh/authorized_keys 文件。這樣,所有人都將通過 Git 賬戶訪問主機。
- 另一個辦法是讓 ssh 服務器通過某個 LDAP 服務,或者其他已經設定好的集中授權機制,來進行授權。
這里我們使用第二種方法,收集所有需要登錄該 Git 服務器用戶的公鑰,就是他們自己的 id_rsa.pub 文件,把所有公鑰導入到 /home/git/.ssh/authorized_keys 文件里,每行一個。(注意:/home/git/.ssh/authorized_keys 這個文件的 owner 為 Git ,如果不是請使用 chown 命令修改)。
下面是創建公鑰命令:
$ ssh-keygen -t rsa -C 'your email@domain.com'
-t 指定密鑰類型,默認即 rsa ,可以省略
-C 設置注釋文字,比如你的郵箱
關於創建公鑰的詳細信息,可以參考 http://github.com/guides/providing-your-ssh-key。
4 禁用 shell 登錄
出於安全考慮,你可以用 Git 自帶的 git-shell 工具限制 git 用戶的活動范圍。這可以通過編輯 /etc/passwd 文件完成。找到類似下面的一行:
把 bin/sh 改為 /usr/bin/git-shell (或者用 which git-shell 查看它的實際安裝路徑)
git:x:1003:1003:,,,:/home/git:/bin/bash
改為:
git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell
現在 git 用戶只能用 ssh 連接來推送和獲取 Git 倉庫,而不能直接使用服務器的 shell。嘗試普通 ssh 登錄的話,會被拒絕登錄。
5 初始化Git倉庫
選定一個目錄作為 Git 倉庫,如 /home/git/project.git ,在 /home/git/ 目錄下輸入命令:
$ sudo git init --bare project.git
Git 會創建一個裸倉庫,裸倉庫沒有工作區,因為服務器上的 Git 倉庫是為了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的 Git 倉庫通常都以 .git 結尾。然后,把 project.git 的 owner 改為 git :
$ sudo chown -R git:git project.git
6 克隆遠程倉庫
ssh 指定私鑰的配置管理,為本地添加 ssh 別名,編輯 ~/.ssh/config ,如果沒有該文件,創建一個:
$ vi ~/.ssh/config
在 config 中添加:
# 注釋說明 Host 別名 HostName 域名或 ip User 登陸服務器用的賬號 Port 端口號(默認22,可以不填,如果服務器修改了 ssh 登錄端口號,此處需要修改) IdentityFile 密鑰文件的位置
例如設置為:
# bingdian's git server Host gitserver HostName 162.188.23.33 User git Port 9000 IdentityFile ~/.ssh/server_rsa
現在,可以通過 git clone 命令克隆遠程倉庫了:
$ git clone ssh://git@gitserver:/home/git/project.git
接下來你就可以享受你的 Git 之旅了。