如何為GitHub生成SSH金鑰

如何為GitHub生成SSH金鑰

Git和GitHub是每個開發人員必不可少的工具。它們被廣泛用於幾乎所有型別的軟體開發專案。

還有其他Git託管服務,例如Gitlab和Bitbucket,但GitHub是開發人員最受歡迎的選擇。您甚至可以編輯您的個人資料,使其對招聘人員更具吸引力。

您可以使用Git和GitHub來組織您的專案,與其他開發人員協作。

但是由於Git和GitHub是相關但不同的工具,因此您需要不斷更新您的工作流程。

我們建議為您的每臺機器使用SSH金鑰。因此,在本教程中,您將瞭解它們是什麼、它們的一些優點以及如何生成和配置GitHub SSH金鑰。

  1. 什麼是SSH金鑰?
  2. 在GitHub上使用SSH金鑰

什麼是SSH金鑰?

簡而言之,SSH金鑰是用於SSH(安全外殼)協議的憑據,用於通過Internet對遠端計算機進行安全訪問。通常,該身份驗證發生在命令列環境中。

該協議基於客戶端-伺服器架構,這意味著您作為使用者(或“客戶端”)需要使用稱為SSH客戶端的特殊軟體登入遠端伺服器並執行命令。這基本上就是您在通過終端對GitHub進行身份驗證時所做的事情。

Git推送

Git推送

但SSH不僅僅用於GitHub。谷歌雲和亞馬遜網路服務等其他平臺廣泛使用它來建立安全通道來訪問他們的服務。

現在,進入SSH金鑰的真正工作原理,您需要了解公鑰和私鑰之間的區別。

公鑰與私鑰

讓我們從基礎開始。

SSH協議使用一種稱為非對稱加密的加密技術。這個詞聽起來可能很複雜和奇怪,但事實並非如此。

基本上,非對稱加密是一個使用一對金鑰的系統,即公鑰私鑰

正如您可能猜到的那樣,公鑰可以與任何人共享。其主要目的是加密資料,將訊息轉換為密碼或密文。此金鑰通常會傳送到其他系統(例如伺服器)以在通過Internet傳送資料之前對其進行加密。

另一方面,私鑰是您必須自己保管的。它用於使用您的公鑰解密加密資料。沒有它,就不可能解碼您的加密資訊。

此方法允許您和伺服器保持安全的通訊通道來傳輸資訊。

當您通過SSH連線到伺服器時,後臺會發生以下情況:

  1. 客戶端將公鑰傳送到伺服器。
  2. 伺服器要求客戶端使用私鑰對使用公鑰加密的隨機訊息進行簽名。
  3. 客戶端簽署訊息並將結果轉發給伺服器。
  4. 客戶端和伺服器之間建立了安全連線。

確保您的私鑰安全並在任何情況下都不要與任何人共享,這一點很重要。它們實際上是傳送給您的所有資訊的關鍵。

在GitHub上使用SSH金鑰

自2021年8月13日起,Github不再接受命令列訪問的密碼驗證。這意味著現在您需要通過個人訪問令牌進行身份驗證或使用SSH金鑰(更方便一點)。

當您嘗試在終端中通過HTTP使用GitHub密碼進行身份驗證時,會發生以下情況:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Username for 'https://github.com': yourusername
Password for 'https://yourusername@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'
Username for 'https://github.com': yourusername Password for 'https://yourusername@github.com': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'
Username for 'https://github.com': yourusername
Password for 'https://yourusername@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHub需要您的公鑰來授權您通過SSH編輯您的任何儲存庫。

讓我們看看如何在本地生成SSH金鑰。

如何在本地生成SSH金鑰

現在您對SSH協議以及公鑰和私鑰之間的區別有了一些瞭解,是時候在您的機器和GitHub儲存庫之間設定安全的SSH通道了。

在我們繼續之前,您應該已經有一個GitHub帳戶,以及在您的系統中安裝了Git的終端/命令提示符。如果您執行的是Windows,請確保您安裝了Git bash,它具有內建本教程所需的所有工具。

OpenSSH客戶端是用於通過SSH連線的最流行的開源軟體。您無需擔心作業系統,因為它預設安裝在Linux、macOS和Windows 10上。

您需要在Windows上啟動命令提示符或在基於Unix的系統上啟動終端來生成本地SSH金鑰。通常,您可以通過在應用程式面板中搜尋“終端”、“cmd”或“powershell”,然後單擊顯示的圖示來執行此操作。

終端應用程式搜尋

終端應用程式搜尋

如果您使用Linux,大多數發行版都有快捷鍵Ctrl + Alt + T開啟終端。

完成此操作後,您應該有一個類似於下圖的視窗。

終端應用

終端應用

執行以下命令以生成本地SSH金鑰對:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh-keygen -t ed25519 -C "wboltuser@wbolt.com"
ssh-keygen -t ed25519 -C "wboltuser@wbolt.com"
ssh-keygen -t ed25519 -C "wboltuser@wbolt.com"

是時候告訴你一個祕密了:沒有人能真正記住這個命令!大多數開發人員每次都必須使用Google搜尋,因為:

  1. 這是一個非常長的命令,帶有容易忘記的、看似隨機的數字。
  2. 我們很少使用它,所以大部分時間都不值得把它記在記憶體中。

但是,瞭解我們引入終端的每個命令很重要,所以讓我們看看這個命令的每個部分的含義。

  • ssh-keygen:用於建立一對新的SSH金鑰的命令列工具。你可以看到它的標誌ssh-keygen help
  • -t ed25519:-t標誌用於指示用於建立金鑰對數字簽名的演算法。如果您的系統支援它,ed25519是您可以用來建立SSH金鑰對的最佳演算法。
  • -C “email”:-c標誌用於在公鑰末尾提供自定義註釋,通常是金鑰對建立者的電子郵件或標識。

在終端中輸入命令後,您必須輸入要儲存金鑰的檔案。預設情況下,它位於您的主目錄中,位於名為“.ssh”的隱藏資料夾中,但您可以將其更改為您喜歡的任何內容。

然後,系統會要求您輸入密碼以新增到您的金鑰對中。如果您的裝置在任何時候受到威脅,這會增加額外的安全層。新增密碼不是強制性的,但始終建議您這樣做。

整個過程是這樣的:

ssh-keygen命令

ssh-keygen命令

如您所見,此命令在您選擇的目錄(通常為 ~/.ssh)中生成兩個檔案:帶有副檔名的公鑰.pub和不帶副檔名的私鑰。

稍後我們將向您展示如何將公鑰新增到您的GitHub帳戶。

將SSH金鑰新增到ssh-agent

ssh-agent程式在後臺執行,安全地儲存您的私鑰和密碼,並讓它們隨時可供ssh使用。這是一個很棒的實用程式,可以讓您在每次想要連線到伺服器時都不必輸入密碼。

因此,您要將新的私鑰新增到此代理。就是這樣:

1. 確保ssh-agent在後臺執行。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
eval `ssh-agent`
# Agent pid 334065
eval `ssh-agent` # Agent pid 334065
eval `ssh-agent`
# Agent pid 334065

如果您收到與此類似的訊息,如果一切正常。這意味著ssh-agent在特定的程序ID (PID) 下執行。

2. 將您的SSH私鑰(沒有副檔名的私鑰)新增到 ssh-agent。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh-add ~/.ssh/wbolt_keys
ssh-add ~/.ssh/wbolt_keys
ssh-add ~/.ssh/wbolt_keys

wbolt_keys替換為SSH金鑰的名稱。如果這是您建立的第一個金鑰,則應將其命名為“id_algorithm_used”,例如id_ed25519

將SSH金鑰新增到GitHub帳戶

最後一步是將您的公鑰新增到您的GitHub帳戶。只需按照以下說明操作:

1. 將SSH公鑰複製到剪貼簿。您可以使用文字編輯器開啟檔案所在的位置並複製它,或使用終端顯示其內容。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cat ~/.ssh/wbolt_keys.pub
# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk wboltuser@wbolt.com
cat ~/.ssh/wbolt_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk wboltuser@wbolt.com
cat ~/.ssh/wbolt_keys.pub
# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk wboltuser@wbolt.com

2. 登入GitHub並轉到頁面的右上角,單擊您的個人資料照片,然後選擇設定。 GitHub設定

GitHub設定

3. 然後,在配置檔案中,單擊SSH和GPG金鑰

SSH和GPG金鑰

SSH和GPG金鑰

4. 單擊新建 SSH 金鑰按鈕。

新的SSH金鑰按鈕

新的SSH金鑰按鈕

4. 在GitHub上為您的新SSH金鑰命名通常是您將使用該金鑰的裝置。然後將金鑰貼上到金鑰區域。

新增新的SSH金鑰表單

新增新的SSH金鑰表單

5. 新增您的SSH金鑰。

新增SSH金鑰按鈕

新增SSH金鑰按鈕

使用回購推送測試SSH連線

是時候測試你迄今為止所做的一切了。您將使用SSH更改、提交和推送到現有儲存庫之一,以確保您的連線設定正確。

首先,我們需要將儲存庫克隆到我們的本地機器中。我們可以到GitHub上的repo頁面,複製它提供的SSH地址。

SSH克隆命令

SSH克隆命令

然後,使用終端克隆repo:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git clone git@github.com:DaniDiazTech/HTML-site.git
git clone git@github.com:DaniDiazTech/HTML-site.git
git clone git@github.com:DaniDiazTech/HTML-site.git

現在,讓我們在index.html檔案中新增一個簡單的<h1>標籤:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
...
<div class="container my-2">
<h1 class="text-center">A new title!<h1>
</div>
<div class="container my-3">
...
... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...
...
<div class="container my-2">
<h1 class="text-center">A new title!<h1>
</div>
<div class="container my-3">
...

簡單的HTML網站

簡單的HTML網站

我們沒有使用任何JavaScript或CSS來保持此編輯的簡單性。

完成此操作後,提交更改:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git commit -am "Added a simple title"
git commit -am "Added a simple title"
git commit -am "Added a simple title"

並像往常一樣將它們推送到GitHub。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git push
git push
git push

如果一切順利,恭喜!你只需在你的機器和GitHub之間建立一個SSH連線。

管理不同GitHub帳戶的多個SSH金鑰

如果您有多個GitHub帳戶(假設一個用於您的個人專案,一個用於您的工作),則很難將SSH用於這兩個帳戶。您通常需要不同的機器來對不同的GitHub帳戶進行身份驗證。

但這可以通過配置SSH配置檔案輕鬆解決。

讓我們開始吧。

1. 建立另一個SSH金鑰對,並將其新增到您的另一個GitHub帳戶。請記住您要為其分配新金鑰的檔案的名稱。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh-keygen -t ed25519 -C "work@email.com"
ssh-keygen -t ed25519 -C "work@email.com"
ssh-keygen -t ed25519 -C "work@email.com"

2. 建立SSH配置檔案。配置檔案告訴ssh程式它應該如何執行。預設情況下,配置檔案可能不存在,所以在 .ssh/ 資料夾中建立它:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
touch ~/.ssh/config
touch ~/.ssh/config
touch ~/.ssh/config

3. 修改SSH配置檔案。開啟配置檔案並貼上以下程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#Your day-to-day GitHub account
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# Work account
Host github-work
HostName github.com
IdentityFile ~/.ssh/work_key_file
IdentitiesOnly yes
#Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes
#Your day-to-day GitHub account
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# Work account
Host github-work
HostName github.com
IdentityFile ~/.ssh/work_key_file
IdentitiesOnly yes

現在,每次您需要使用您的工作或輔助帳戶通過SSH進行身份驗證時,您都需要稍微調整一下repo SSH地址,來自:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git@github.com:workaccount/project.git
git@github.com:workaccount/project.git
git@github.com:workaccount/project.git

…到:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git@github-work:workaccount/project.git
git@github-work:workaccount/project.git
git@github-work:workaccount/project.git

小計

恭喜——你已經學會了通過SSH連線到GitHub所需的大部分實用知識!

本教程討論了對SSH協議的需求、公鑰和私鑰的區別、如何生成金鑰、將它們新增到GitHub,甚至為不同的GitHub帳戶管理多個SSH金鑰。請記住,除非您想失去對所有內容的訪問許可權,否則您的私鑰需要保持這種狀態:私有。

評論留言