如何為 GitHub 生成 SSH 密鑰
已發表: 2022-02-05Git 和 GitHub 是每個開發人員必不可少的工具。 它們被廣泛用於幾乎所有類型的軟件開發項目。
還有其他 Git 託管服務,例如 Gitlab 和 Bitbucket,但 GitHub 是開發人員最受歡迎的選擇。 您甚至可以編輯您的個人資料,使其對招聘人員更具吸引力。
您可以使用 Git 和 GitHub 來組織您的項目,與其他開發人員協作,當然還有在 Kinsta。
但是由於 Git 和 GitHub 是相關但不同的工具,因此您需要不斷地使用它們更新您的工作流程。
我們建議為您的每台機器使用 SSH 密鑰。 因此,在本教程中,您將了解它們是什麼、它們的一些優點以及如何生成和配置 GitHub SSH 密鑰。
讓我們開始吧!
什麼是 SSH 密鑰?
簡而言之,SSH 密鑰是用於 SSH(安全外殼)協議的憑據,用於通過 Internet 對遠程計算機進行安全訪問。 通常,該身份驗證發生在命令行環境中。
該協議基於客戶端-服務器架構,這意味著您作為用戶(或“客戶端”)需要使用稱為 SSH 客戶端的特殊軟件登錄遠程服務器並執行命令。 這基本上就是您在通過終端對 GitHub 進行身份驗證時所做的事情。

但 SSH 不僅僅用於 GitHub。 Kinsta、谷歌云和亞馬遜網絡服務等其他平台廣泛使用它來創建安全通道來訪問他們的服務。
現在,進入 SSH 密鑰的真正工作原理,您需要了解公鑰和私鑰之間的區別。
公鑰與私鑰
讓我們從基礎開始。
SSH 協議使用一種稱為非對稱加密的加密技術。 這個詞聽起來可能很複雜和奇怪,但事實並非如此。
基本上,非對稱加密是一個使用一對密鑰的系統,即公鑰和私鑰。
正如您可能猜到的那樣,公鑰可以與任何人共享。 其主要目的是加密數據,將消息轉換為密碼或密文。 此密鑰通常會發送到其他系統(例如服務器)以在通過 Internet 發送數據之前對其進行加密。
另一方面,私鑰是您必須自己保管的。 它用於使用您的公鑰解密加密數據。 沒有它,就不可能解碼您的加密信息。
此方法允許您和服務器保持安全的通信通道來傳輸信息。
當您通過 SSH 連接到服務器時,後台會發生以下情況:
- 客戶端將公鑰發送到服務器。
- 服務器要求客戶端使用私鑰對使用公鑰加密的隨機消息進行簽名。
- 客戶端簽署消息並將結果轉發給服務器。
- 客戶端和服務器之間建立了安全連接。
確保您的私鑰安全並在任何情況下都不要與任何人共享,這一點很重要。 它們實際上是發送給您的所有信息的關鍵。
在 GitHub 上使用 SSH 密鑰
自 2021 年 8 月 13 日起,Github 不再接受命令行訪問的密碼驗證。 這意味著現在您需要通過個人訪問令牌進行身份驗證或使用 SSH 密鑰(更方便一點)。
當您嘗試在終端中通過 HTTP 使用 GitHub 密碼進行身份驗證時,會發生以下情況:
Username for 'https://github.com': yourusername Password for 'https://[email protected]': 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”,然後單擊顯示的圖標來執行此操作。

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

運行以下命令以生成本地 SSH 密鑰對:
ssh-keygen -t ed25519 -C "[email protected]"
是時候告訴你一個秘密了:沒有人能真正記住這個命令! 大多數開發人員每次都必須使用 Google 搜索,因為:
- 這是一個非常長的命令,帶有容易忘記的、看似隨機的數字。
- 我們很少使用它,所以大部分時間都不值得把它記在內存中。
但是,了解我們引入終端的每個命令很重要,所以讓我們看看這個命令的每個部分的含義。
- ssh-keygen:用於創建一對新的 SSH 密鑰的命令行工具。 您可以使用
ssh-keygen help
查看其標誌 - -t ed25519:
-t
標誌用於指示用於創建密鑰對數字簽名的算法。 如果您的系統支持,ed25519
是您可以用來創建 SSH 密鑰對的最佳算法。 - -C “email”: -
-c
標誌用於在公鑰末尾提供自定義註釋,通常是密鑰對創建者的電子郵件或標識。
在終端中輸入命令後,您必須輸入要保存密鑰的文件。 默認情況下,它位於您的主目錄中,位於名為“.ssh”的隱藏文件夾中,但您可以將其更改為您喜歡的任何內容。
然後,系統會要求您輸入密碼以添加到您的密鑰對中。 如果您的設備在任何時候受到威脅,這會增加額外的安全層。 添加密碼不是強制性的,但始終建議您這樣做。
整個過程是這樣的:

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

稍後我們將向您展示如何將公鑰添加到您的 GitHub 帳戶。
將 SSH 密鑰添加到 ssh-agent
ssh-agent程序在後台運行,安全地保存您的私鑰和密碼,並讓它們隨時可供 ssh 使用。 這是一個很棒的實用程序,可以讓您在每次想要連接到服務器時都不必輸入密碼。
因此,您要將新的私鑰添加到此代理。 就是這樣:
- 確保 ssh-agent 在後台運行。
eval `ssh-agent` # Agent pid 334065
如果您收到與此類似的消息,如果一切正常。 這意味著 ssh-agent 在特定的進程 ID (PID) 下運行。
- 將您的 SSH 私鑰(沒有擴展名的私鑰)添加到 ssh-agent。
ssh-add ~/.ssh/kinsta_keys
將kinsta_keys替換為 SSH 密鑰的名稱。 如果這是您創建的第一個密鑰,則應將其命名為“id_algorithm_used”,例如id_ed25519 。
將 SSH 密鑰添加到 GitHub 帳戶
最後一步是將您的公鑰添加到您的 GitHub 帳戶。 只需按照以下說明操作:
- 將 SSH 公鑰複製到剪貼板。 您可以使用文本編輯器打開文件所在的位置並複制它,或使用終端顯示其內容。
cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
- 登錄 GitHub ] 並轉到頁面的右上角,單擊您的個人資料照片,然後選擇設置。
GitHub 設置。 - 然後,在配置文件中,單擊SSH 和 GPG 密鑰。
SSH 和 GPG 密鑰。 - 單擊新建 SSH 密鑰按鈕。
新的 SSH 密鑰按鈕。 - 在GitHub上為您的新 SSH 密鑰命名 - 通常是您將使用該密鑰的設備。 然後將密鑰粘貼到密鑰區域。
添加新的 SSH 密鑰表單。 - 添加您的 SSH 密鑰。
添加 SSH 密鑰按鈕。
使用回購推送測試 SSH 連接
是時候測試你迄今為止所做的一切了。 您將使用 SSH 更改、提交和推送到現有存儲庫之一,以確保您的連接設置正確。
所有 Kinsta 託管計劃都包括來自我們資深 WordPress 開發人員和工程師的 24/7 支持。 與支持我們財富 500 強客戶的同一團隊聊天。 看看我們的計劃!
對於我們的示例,我們將修改我們在 Git for Web Development 教程中創建的簡單 HTML 站點。
首先,我們需要將存儲庫克隆到我們的本地機器中。 我們可以到 GitHub 上的 repo 頁面,複製它提供的 SSH 地址。

然後,使用終端克隆 repo:
git clone [email protected]:DaniDiazTech/HTML-site.git
現在,讓我們在index.html文件中添加一個簡單的<h1>
標籤:
... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...

我們沒有使用任何 JavaScript 或 CSS 來保持此編輯的簡單性。 但是,如果您精通 JavaScript,您可能會在 Kinsta 找到一席之地。 檢查成為 Kinsta 團隊成員所需的編碼技能。
完成此操作後,提交更改:
git commit -am "Added a simple title"
並像往常一樣將它們推送到 GitHub。
git push
如果一切順利,恭喜! 你只需在你的機器和 GitHub 之間建立一個 SSH 連接。
管理不同 GitHub 帳戶的多個 SSH 密鑰
如果您有多個 GitHub 帳戶(假設一個用於您的個人項目,一個用於您的工作),則很難將 SSH 用於這兩個帳戶。 您通常需要不同的機器來對不同的 GitHub 帳戶進行身份驗證。
但這可以通過配置 SSH 配置文件輕鬆解決。
讓我們開始吧。
- 創建另一個 SSH 密鑰對,並將其添加到您的另一個 GitHub 帳戶。 請記住您要為其分配新密鑰的文件的名稱。
ssh-keygen -t ed25519 -C "[email protected]"
- 創建 SSH 配置文件。 配置文件告訴 ssh 程序它應該如何運行。 默認情況下,配置文件可能不存在,所以在 .ssh/ 文件夾中創建它:
touch ~/.ssh/config
- 修改 SSH 配置文件。 打開配置文件並粘貼以下代碼:
#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 地址,來自:
[email protected]:workaccount/project.git
…到:
[email protected]:workaccount/project.git
概括
恭喜——你已經學會了通過 SSH 連接到 GitHub 所需的大部分實用知識!
本教程討論了對 SSH 協議的需求、公鑰和私鑰的區別、如何生成密鑰、將它們添加到 GitHub,甚至為不同的 GitHub 帳戶管理多個 SSH 密鑰。 請記住,除非您想失去對所有內容的訪問權限,否則您的私鑰需要保持這種狀態:私有。
有了這些知識,現在您就可以使用 Git 和 GitHub 開發完美的工作流程了。 繼續編碼!