1. 程式人生 > >一個簡易git伺服器的搭建

一個簡易git伺服器的搭建

檢視本機ssh公鑰,生成公鑰

檢視ssh公鑰方法:

1. 開啟git bash視窗
2. 進入.ssh目錄: cd ~/.ssh
3. 找到id_rsa.pub檔案: ls
4. 檢視公鑰:cat id_rsa.pub
            或者 vim id_rsa.pub

何為公鑰:

1. 很多伺服器都是需要認證的,ssh認證是其中的一種。在客戶端生成公鑰,把生成的公鑰新增到伺服器,你以後連線伺服器就不用每次都輸入使用者名稱和密碼了。
2. 很多git伺服器都是用ssh認證方式,你需要把你生成的公鑰傳送給程式碼倉庫管理員,讓他給你新增到伺服器上,你就可以通過ssh自由地拉取和提交程式碼了。

生成公鑰:

1.如果通過上面的方式找不到公鑰,你就需要先生成公鑰了:ssh-keygen
2.接著會確認存放公鑰的地址,預設就是上面說的路徑,直接enter鍵確認
3.接著會要求輸入密碼和確認密碼,如果不想設定密碼直接不輸入內容 按enter鍵

配置伺服器

我們來看看如何配置伺服器端的 SSH 訪問。 本例中,我們將使用 authorized_keys 方法來對使用者進行認證。 同時我們假設你使用的作業系統是標準的 Linux 發行版,比如 Ubuntu。 首先,建立一個作業系統使用者 git,併為其建立一個 .ssh 目錄。

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

接著,我們需要為系統使用者 git 的 authorized_keys 檔案新增一些開發者 SSH 公鑰。 假設我們已經獲得了若干受信任的公鑰,並將它們儲存在臨時檔案中。 與前文類似,這些公鑰看起來是這樣的:

$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCBr07n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T18/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4owOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU5UpkaX8KyGlLwsNeeztobF8m72ALC/nLF6JLtPofwFfggc+myiv
O7TCUSBdLQsdMVOFq1I2ufWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair

將這些公鑰加入系統使用者 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

其中john、josie、jessica是為了區分不同使用者公鑰

現在我們來為開發者新建一個空倉庫。可以藉助帶 --bare 選項的 git init 命令來做到這一點,該命令在初始化倉庫時不會建立工作目錄:

$ cd /home/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/

注意/opt/git/project.git這個路徑要根據自己的路徑來處理,使用pwd命令來檢視該路徑,以便下面使用

接著,John、Josie 或者 Jessica 中的任意一人可以將他們專案的最初版本推送到這個倉庫中,他只需將此倉庫設定為專案的遠端倉庫並向其推送分支。 請注意,每新增一個新專案,都需要有人登入伺服器取得 shell,並建立一個裸倉庫。 我們假定這個設定了 git 使用者和 Git 倉庫的伺服器使用 gitserver 作為主機名。 同時,假設該伺服器執行在內網,並且你已在 DNS 配置中將 gitserver 指向此伺服器。那麼我們可以執行如下命令(假定 myproject 是已有專案且其中已包含檔案):

# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin [email protected]:/opt/git/project.git
$ git push origin master

此時,其他開發者可以克隆此倉庫,並推回各自的改動,步驟很簡單:

$ git clone [email protected]:/home/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

注:[email protected]:/home/git/project.git中gitserver可替換成伺服器IP地址

通過這種方法,你可以快速搭建一個具有讀寫許可權、面向多個開發者的 Git 伺服器。

精通git(第二版)