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
沒有留言:
張貼留言