搭建經過 ssh 訪問的 Git 服務器

1、Git - 協議

Git 可使用四種主要的協議來傳輸數據:本地傳輸,ssh 協議,Git 協議和 HTTP 協議。 git

Git 使用的傳輸協議中最多見的就是 ssh 了。大多數環境已經支持經過 ssh 對服務器的訪問 ,ssh 也是惟一一個同時支持讀寫操做的網絡協議。另外兩個網絡協議(HTTP 和 Git)一般都是隻讀的。ssh 同時也是一個驗證受權的網絡協議;而由於其廣泛性,通常架設和使用都很容易。 github

本文主要介紹如何搭建 ssh 協議的 Git 服務器。 shell

2、在服務器上部署 Git

首先,你須要一臺 Linux 器而且擁有 sudo 權限,本文使用的是 Debian 7.0 x32 。下面就開始安裝: 安全

2.1 第一步,安裝 git :

$ sudo apt-get install git

2.2 第二步,建立一個 git 用戶,用來運行 git 服務:

$ sudo adduser git

2.3 第三步,設置訪問權限:

有幾個辦法可讓團隊的每一個成員都有訪問權: bash

  1. 給每一個人創建一個帳戶。反覆使用 adduser 並給全部人設定臨時密碼比較麻煩。
  2. 在服務器上創建一個 Git 帳戶,讓每一個須要寫權限的人發送一個 ssh 公鑰,而後將其加入 Git 帳戶的 ~/.ssh/authorized_keys 文件。這樣,全部人都將經過 Git 帳戶訪問主機。
  3. 另外一個辦法是讓 ssh 服務器經過某個 LDAP 服務,或者其餘已經設定好的集中受權機制,來進行受權。

這裏咱們使用第二種方法,收集全部須要登陸該 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 ,能夠省略 dom

-C 設置註釋文字,好比你的郵箱 ssh

關於建立公鑰的詳細信息,能夠參考 http://github.com/guides/providing-your-ssh-keyide

2.4 第四步,禁用 shell 登陸:

出於安全考慮,你能夠用 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 登陸的話,會被拒絕登陸。

2.5 第五步,初始化Git倉庫:

選定一個目錄做爲 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

2.6 第六步,克隆遠程倉庫:

ssh 指定私鑰的配置管理,爲本地添加 ssh 別名,編輯 ~/.ssh/config ,若是沒有該文件,建立一個:

$ vi ~/.ssh/config

在 config 中添加:

# 註釋說明
Host 別名
HostName  域名或 ip
User 登錄服務器用的帳號
Port 端口號(默認22,能夠不填,若是服務器修改了 ssh 登陸端口號,此處須要修改)
IdentityFile 密鑰文件的位置

例如設置爲:

# bingdian's git server
Host gitserver
HostName 162.188.23.33
User git
Port 9000
IdentityFile ~/.ssh/server_rsa

如今,能夠經過 git clone 命令克隆遠程倉庫了:

$ git clone ssh://git@gitserver:/home/git/project.git

接下來你就能夠享受你的 Git 之旅了。

擴展閱讀

相關文章
相關標籤/搜索