搭建通過 ssh 訪問的 Git 伺服器

2021-09-24 12:39:04 字數 2206 閱讀 3907

from: 

git 可以使用四種主要的協議來傳輸資料:本地傳輸,ssh 協議,git 協議和 http 協議。

git 使用的傳輸協議中最常見的就是 ssh 了。大多數環境已經支援通過 ssh 對伺服器的訪問 ,ssh 也是唯一乙個同時支援讀寫操作的網路協議。另外兩個網路協議(http 和 git)通常都是唯讀的。ssh 同時也是乙個驗證授權的網路協議;而因為其普遍性,一般架設和使用都很容易。

本文主要介紹如何搭建 ssh 協議的 git 伺服器。

首先,你需要一台 linux 器並且擁有 sudo 許可權,本文使用的是 debian 7.0 x32 。下面就開始安裝:

$ sudo apt-get install git
$ sudo adduser git
有幾個辦法可以讓團隊的每個成員都有訪問權:

給每個人建立乙個賬戶。反覆使用 adduser 並給所有人設定臨時密碼比較麻煩。

在伺服器上建立乙個 git 賬戶,讓每個需要寫許可權的人傳送乙個 ssh 公鑰,然後將其加入 git 賬戶的 ~/.ssh/authorized_keys 檔案。這樣,所有人都將通過 git 賬戶訪問主機。

另乙個辦法是讓 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 protected]'
-t 指定金鑰型別,預設即 rsa ,可以省略

-c 設定注釋文字,比如你的郵箱

關於建立公鑰的詳細資訊,可以參考 

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

選定乙個目錄作為 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
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 之旅了。

搭建通過 ssh 訪問的 Git 伺服器

git 可以使用四種主要的協議來傳輸資料 本地傳輸,ssh 協議,git 協議和 http 協議。git 使用的傳輸協議中最常見的就是 ssh 了。大多數環境已經支援通過 ssh 對伺服器的訪問 ssh 也是唯一乙個同時支援讀寫操作的網路協議。另外兩個網路協議 http 和 git 通常都是唯讀的。...

搭建通過 ssh 訪問的 Git 伺服器

git 可以使用四種主要的協議來傳輸資料 本地傳輸,ssh 協議,git 協議和 http 協議。git 使用的傳輸協議中最常見的就是 ssh 了。大多數環境已經支援通過 ssh 對伺服器的訪問 ssh 也是唯一乙個同時支援讀寫操作的網路協議。另外兩個網路協議 http 和 git 通常都是唯讀的。...

搭建通過 ssh 訪問的 Git 伺服器

git 可以使用四種主要的協議來傳輸資料 本地傳輸,ssh 協議,git 協議和 http 協議。git 使用的傳輸協議中最常見的就是 ssh 了。大多數環境已經支援通過 ssh 對伺服器的訪問 ssh 也是唯一乙個同時支援讀寫操作的網路協議。另外兩個網路協議 http 和 git 通常都是唯讀的。...