Git 可以使用四種主要的協議來傳輸數據:本地傳輸,ssh 協議,Git 協議和 HTTP 協議。
Git 使用的傳輸協議中最常見的就是 ssh 了。大多數環境已經支持通過 ssh 對服務器的訪問 ,ssh 也是唯一一個同時支持讀寫操作的網絡協議。另外兩個網絡協議(HTTP 和 Git)通常都是只讀的。ssh 同時也是一個驗證授權的網絡協議;而因為其普遍性,一般架設和使用都很容易。
本文主要介紹如何搭建 ssh 協議的 Git 服務器。
首先,你需要一台 Linux 器並且擁有 sudo 權限,本文使用的是 Debian 7.0 x32 。下面就開始安裝:
$ sudo apt-get install git
$ sudo adduser git
有幾個辦法可以讓團隊的每個成員都有訪問權:
這裡我們使用第二種方法,收集所有需要登錄該 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。
出於安全考慮,你可以用 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 登錄的話,會被拒絕登錄。
選定一個目錄作為 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
ssh 指定私鑰的配置管理,為本地添加 ssh 別名,編輯 ~/.ssh/config ,如果沒有該文件,創建一個:
$ vi ~/.ssh/config
在 config 中添加:
# 注釋說明Host 別名HostName 域名或 ipUser 登陸服務器用的賬號Port 端口號(默認22,可以不填,如果服務器修改了 ssh 登錄端口號,此處需要修改)IdentityFile 密鑰文件的位置
例如設置為:
# bingdian's git serverHost gitserverHostName 162.188.23.33User gitPort 9000IdentityFile ~/.ssh/server_rsa
現在,可以通過 git clone 命令克隆遠程倉庫了:
$ git clone ssh://git@gitserver:/home/git/project.git
接下來你就可以享受你的 Git 之旅了。