在 Linux 中架設 Git 伺服器教學(使用 SSH 加密傳輸)

這裡簡單說明在 Linux 中如何架設 Git 伺服器,將自己電腦中的 Git 專案放進伺服器中,讓整個團隊進行協同開發。


Git 伺服器所使用的傳輸協定分為好幾種,這裡介紹如何設定 SSH 加密傳輸的 Git 伺服器。

基本 Git 伺服器架設

使用 git clone 加上 --bare 參數,將目前自己電腦中的 repository 匯出一份 bare repository(不含 working directory 的 repository,而習慣上 bare repository 的目錄名稱都會以 .git 結尾):
git clone --bare my_project my_project.git
這樣在 my_project.git 中應該就會有一份 git 的目錄資料。

上面這個建立 bare repository 的動作,大致上就是將 my_project/.git 目錄複製出來而已:
cp -Rf my_project/.git my_project.git
其中有些小差異,不過在這裡沒有太大的影響。

接著將這個 bare repository 放進伺服器中:
scp -r my_project.git user@git.example.com:/opt/git/
這樣會將剛剛建立的 bare repository 放進 git.example.com 這台伺服器的 /opt/git/ 目錄中,當然你要先確定你有這個目錄的寫入權限。

在這個時候,只要可以讀取 /opt/git/ 目錄的使用者,都可以 clone 這個 repository:
git clone user@git.example.com:/opt/git/my_project.git

如果要讓開發團隊中的每個人都可以將自己開發的內容 push 上來,那就要再執行 git init 並加上 --shared 參數:
ssh user@git.example.com
cd /opt/git/my_project.git
git init --bare --shared

這樣基本的 Git 伺服器就完成了,現在只要在伺服器上有帳號的人,都可以使用這個 repository 進行開發了。

設定 SSH 帳號與權限

上面設定好的 Git 伺服器適用於開發團隊中每位成員都有 Linux 帳號的狀況,如果團隊的成員很多,不想要爲每一個人都開一個帳號,那比較簡單的做法就是大家都使用同一個 Linux 帳號。

首先在伺服器中新增一個 Git 專用的帳號:
sudo adduser git

/opt/git/DesktopApp.git 整個目錄的擁有者設定為 git
sudo chown -R git:git /opt/git/DesktopApp.git

變換為 git 帳號權限,在 home 目錄中建立一個 .ssh 目錄:
sudo su git
cd
mkdir .ssh
建立 SSH public key:
ssh-keygen

將產生的 public key 複製到 authorized_keys,讓 SSH 登入時可以使用這支 key 做認證:
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

編輯 /etc/passwd,更改 git 帳號的 shell 為 /usr/bin/git-shell
git:x:1002:1003:,,,:/home/git:/bin/bash
改為
git:x:1002:1003:,,,:/home/git:/usr/bin/git-shell

這樣這定就完成了,最後就把 /home/git/.ssh/id_rsa 交給團隊中的開發者,藉由 public key 認證的方式登入。

這裡產生一組 key 讓所有人共用是比較偷懶的做法,一般來說應該是讓每個人都各自產生自己的 public key,然後全部放進 git~/.ssh/authorized_keys 中:
cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
通常這樣會比較好,不會讓開發者需要管理太多的 private key。

如果是使用 Eclipse 的人,可以使用 Eclipse 直接產生 public key,然後再把這個 key 加進 authorized_keys 中。


參考資料:git-scm.com
本站已經搬家了,欲查看最新的文章,請至 G. T. Wang 新網站