1. 程式人生 > >最簡單git伺服器配置-SSH連線方式

最簡單git伺服器配置-SSH連線方式

Git伺服器連線可用的協議通常有SSH、GIT、HTTP(S)和FTP等,其中最方便實現的是SSH方式。

SSH方式的GIT伺服器實現也有兩種方式:如果你在一個小型團隊並且不需要做許可權控制,那麼使用SSH就可以搭建了,否則你還需要gitolite

本文將介紹如何使用SSH實現最簡單Git伺服器搭建。注意,前面所述的兩種實現方式不可同時搭建。如何解決,在寫本文時還未探索。想來應該需要在伺服器上使用不同使用者做隔離吧。

因為公司版本控制使用的是SVN,並沒有提供搭建git的伺服器,因此我的git伺服器搭建在了本機Ubuntu上(為了配合Redmine一起使用,否則沒必要搭這個本地伺服器)。

準備工作

首先,要保證git服務功能可用。在安裝git的時候,你可能安裝了git包,而不是git-core包。要提供git伺服器功能需要完整安裝git-core包(不知道是不是真的,網上大家都這麼說,反正我搭建之前已經安裝了,沒去驗證真偽)。

sudo apt-get install git-core

當然,你還需要保證你的SSH服務是可用的

sudo apt-get install openssh-server

伺服器使用者

之後需要配置git服務使用者

$ sudo useradd -c "git server account" -m -r -U git
$ id git 
uid=999(git) gid=998(git) 組=998(git)

這樣我們就建立了一個隱藏賬戶git,其id為999(ID小於1000的使用者不會出現在登入列表中)。同時為其建立了同名使用者組

之後需要為git賬戶臨時設定密碼(正常情況下git賬戶是不允許登入的,但我們現在需要登入或切換使用者來進行配置)

$ sudo passwd git
輸入新的 UNIX 密碼: 
重新輸入新的 UNIX 密碼: 
passwd:已成功更新密碼

SSH連線

之後我們需要配置服務端git使用者的金鑰認證登入。可參考我的另一篇部落格《使用RSA Key代替密碼進行ssh遠端登入

這裡簡單記錄下操作程式碼提供參考,不再解釋

$ ssh-keygen -t rsa -f ~/.ssh/git_rsa -C "
[email protected]
" -b 4096 Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/xxx/.ssh/git_rsa. Your public key has been saved in /home/xxx/.ssh/git_rsa.pub. The key fingerprint is: 15:45:de:77:8e:19:34:97:64:3b:27:65:89:cf:47:ec [email protected] The key's randomart image is: +--[ RSA 4096]----+ | .oo =+*| | o +.B+| | . . *=+| | . XE| | S o o| | | | | | | | | +-----------------+ $ ssh-copy-id -i ~/.ssh/git_rsa.pub [email protected] /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added. $ ssh [email protected] -t Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sun Aug 17 10:54:39 CST 2014 System load: 0.08 Processes: 253 Usage of /home: 46.3% of 98.31GB Users logged in: 1 Memory usage: 21% IP address for wlan0: 192.168.0.103 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ 0 packages can be updated. 0 updates are security updates. Last login: Sun Aug 17 10:47:31 2014 from localhost

至此我們可以刪除git使用者的密碼了。之後再需要增加使用者金鑰時,遠端登入修改$HOME/.ssh/authorized_keys檔案,增加對應公鑰內容即可。
$ sudo passwd git -d
passwd:密碼過期資訊已更改。

GIT遠端倉庫

現在,使用者和SSH都準備好了,如何提供服務呢?

這個簡單,只要在git使用者主目錄下建立一個bare版本庫就好了。

我們新建一個空倉庫,你也可以從現有git倉庫克隆

$ ssh [email protected]
$ git init --bare project.git
初始化空的 Git 版本庫於 /home/git/project.git/

或者使用git clone --bare命令進行裸版本庫克隆,注意不要使用--shared引數。

使用遠端倉庫

與使用github相似,不過只能使用[email protected]:repository.git的形式連線

$ git remote add origin [email protected]:project.git
$ git push origin master 
Counting objects: 57, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (28/28), done.
Writing objects: 100% (57/57), 10.40 KiB | 0 bytes/s, done.
Total 57 (delta 9), reused 0 (delta 0)
To [email protected]:project.git
 * [new branch]      master -> master