使用 SSH 連線 Git 伺服器

2022-12-09 21:00:40

關於 SSH

SSH (Secure Shell) 是一種安全的遠端登入協定,可以讓你通過安全的加密連線進行遠端登入。目前,Mac、Windows 10、Linux 系統均有內建 OpenSSH 使用者端。如果你想通過 SSH 連線到 Gitea,首先需要建立一對 SSH 金鑰(即公鑰和私鑰),然後將公鑰上傳到 Gitea。

建立完 SSH 金鑰後,在你的本地計算機上,開啟一個終端視窗,並執行以下命令:

ssh -T [email protected]

如果你的 SSH 金鑰設定正確,這條命令應該能夠成功連線到 Gitea。

在這裡,git 是一個預設的賬號,它是你的 SSH 伺服器的登入名,而不是 Gitea 賬號或者其他任何名稱。gitea.com 是 Gitea 伺服器的主機名或 IP 地址。如果你的 Gitea 設定中有相應的 SSH 公鑰,這條命令應該能夠成功連線到 Gitea。

另外,你還可以使用 SSH 協定操作 Git 其他功能,比如拉取或推播 Git 倉庫,或者執行遠端命令。例如,要將遠端 Git 倉庫拉取到本地,你可以執行以下命令:

git clone [email protected]:gitea/awesome-gitea.git

在這條命令中,gitea/awesome-gitea.git 是你的遠端 Git 倉庫的名稱。

生成/新增 SSH 公鑰

Gitea 提供了基於 SSH 協定的 Git 服務,在使用 SSH 協定存取倉庫之前,需要先設定好賬戶的 SSH 公鑰。

1.開啟終端

2.你可以按如下命令來生成 SSH 金鑰對。其中的-C "[email protected]" 實際上是一條註釋資訊,可以填寫成你的郵箱地址,並不影響生成金鑰的過程。

$ ssh-keygen -t ed25519 -C "[email protected]"

提示: 如果系統不支援較新的 Ed25519 演演算法,你仍然可以使用 RSA 演演算法:

$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ferris/.ssh/id_ed25519):[回車,使用預設路徑]
Created directory '/home/ferris/.ssh'.
Enter passphrase (empty for no passphrase):[可輸入密碼]
Enter same passphrase again:[再次輸入密碼]
Your identification has been saved in /home/ferris/.ssh/id_ed25519
Your public key has been saved in /home/ferris/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:BjlFiHdNt3tI95XnKimBpUV2mhBinfm0jOL9JeG+YDg [email protected]
The key's randomart image is:
+--[ED25519 256]--+
|     .o+=*+ o    |
|    ..o+=+o= .  .|
|     .+. ==.o ..o|
|      .o.==. + oo|
|     . oS...o . o|
|      .o. o..o . |
|      E oo.oo .  |
|       o .o. .   |
|          ..     |
+----[SHA256]-----+

3.按照上述 ssh-keygen 的三次提示分別輸入回車、密碼、確認密碼即可生成 SSH 金鑰對。通過檢視 ~/.ssh/id_ed25519.pub 檔案內容,獲取到你的 SSH 公鑰。請注意:私鑰是 ~/.ssh/id_ed25519。保護好私鑰,不要將私鑰洩露到網路上。

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJZ1HF2aEd61o7/EJ350EbXfOksjjNGdB66CwGVRco1g [email protected]

4.複製生成的 SSH 公鑰,通過個人主頁 「設定」->「SSH/GPG金鑰」->「管理 SSH 金鑰」 ,新增生成的 SSH 公鑰新增到倉庫中。

新增後,在終端(Terminal)中輸入

ssh -T [email protected]

首次使用需要確認並新增主機到本機 SSH 可信列表。若返回 Hi there, USERNAME! You've successfully authenticated... 內容,則證明新增成功。

Hi there, USERNAME! You've successfully authenticated with the key named id_ed25519, but Gitea does not provide shell access.

新增成功後,就可以使用 SSH 協定對倉庫進行操作了。比如拉取、推播、刪除分支。

倉庫級別的「部署金鑰」和賬戶級別「SSH金鑰」的區別

你可以在倉庫主頁 「設定」->「部署金鑰」->「新增部署金鑰」,將 SSH 公鑰新增到倉庫中。

賬戶級別的「SSH金鑰」同時具備推播/拉取的許可權,對使用者建立/參與的任意倉庫均能使用,應用範圍廣、使用方便。

倉庫級別的「部署金鑰」只針對當前設定的倉庫,且預設情況下不開啟推播許可權,我們僅僅將部署金鑰用作拉取程式碼,這通常用於 CI/CD 伺服器拉取倉庫來執行流水線任務。

另外,如果在填寫「部署金鑰」時勾選了「啟用寫許可權」,將賦予部署金鑰推播許可權。

測試 SSH 連線

1.開啟終端,使用 ssh -T 測試你的伺服器

ssh -T [email protected]

第一次連線伺服器時,你會看到以下提示資訊:

The authenticity of host 'gitea.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:Fo6Tm/SLyse8uglFB1JShqQWchU0kcPzSRueD1O9K0I.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

2.輸入 yes 驗證 Gitea 伺服器指紋

Hi there, USERNAME! You've successfully authenticated with the key named id_ed25519, but Gitea does not provide shell access.

如果出現錯誤,請參考 https://docs.gitea.io/zh-cn/faq/

[email protected]: Permission denied (publickey).

為 Git 使用者端設定多個 SSH 私鑰