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

2022-07-04 06:30:11 字數 2280 閱讀 1671

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

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

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

首先,你需要一台 linux 器並且擁有 sudo 許可權,下面就開始安裝:

1 安裝 git 

$ sudo apt-get install git

2 建立乙個 git 使用者,用來執行 git 服務

$ sudo adduser git

3 設定訪問許可權

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

給每個人建立乙個賬戶。反覆使用 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 設定注釋文字,比如你的郵箱

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

4 禁用 shell 登入

把 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 登入的話,會被拒絕登入。

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

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 之旅了。

搭建通過 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 伺服器

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