如何生成並使用GitLab SSH密鑰

重複的用戶名和密碼提示是令人討厭且浪費時間的。

如果您使用密碼認證與您的Gitlab帳戶,每個動作都需要您發送您的憑證,無論是作為命令的一部分還是通過交互式提示。尤其是在GitLab中自動化CI/CD管線時,密碼認證可能既低效又可能構成安全風險。為什麼不結束您的苦難,並切換到安全殼層(SSH)認證使用Gitlab SSH鑰匙?繼續閱讀並學習如何操作!

在本教程結束時,您將已經生成了一對SSH鑰匙,使用鑰匙進行認證並發布一個新的Gitlab項目。

先決條件

本教程是一個動手演示。要跟隨操作,務必準備好以下要求。

  • 您的GitLab帳戶。如果您還沒有一個,先免費註冊一個帳戶。
  • A computer to use as your Gitlab SSH client. This tutorial will be using an Ubuntu 20.04 LTS computer but should work with Windows and macOS too.
  • 更新或安裝Git。本文寫作時的最新版本是2.25.1。

Visual Studio Code(VS Code)。本教程中的示例將使用 VS Code 1.62.3。

生成 Gitlab SSH 金鑰對

SSH 金鑰或金鑰對由私鑰和公鑰組成。簡而言之,私鑰是客戶端(您的計算機)向服務器(Gitlab)提供進行身份驗證的,而公鑰是服務器用於解碼您的私鑰的。如果兩個金鑰匹配,則身份驗證通過。

GitLab 支持兩種類型的 SSH 金鑰對,即 RSAED25519 SSH 金鑰。但在本示例中,您將生成 ED25519 金鑰對,因為它被認為比 RSA 金鑰更安全。按照以下步驟生成 SSH 金鑰對。

1. 在您的桌面上,打開一個終端會話並運行以下命令。此命令將在 VS Code 中打開您的家目錄。

code ~

2. 在 VS Code 中,點擊 終端 —> 新終端

Opening a new terminal instance in VSCode

3. 在 VS Code 终端上运行以下命令 ssh-keygen -t 以生成 ED25519 SSH 密钥类型。评论标签 -C 是可选的,但建议使用以使您的密钥更可识别。

ssh-keygen -t ed25519 -C "Gitlab SSH Key"

4. 在下一个提示中询问要保存密钥的位置时,按 Enter 接受默认文件名。文件名应类似于 /home/<username>/.ssh/id_ed25519,其中 <username> 是您的用户名。

Accepting the default filename

5. 接下来,将口令留空,并按两次 Enter 键。因此,您将创建一个无密码的 SSH 密钥对。

Leaving the passphrase empty

您应该看到与下图类似的结果,显示私钥(id_ed25519)和公钥(id_ed25519.pub)的位置。

私钥和公钥具有相同的基本文件名。但是,公钥具有 .pub 扩展名,而私钥没有扩展名。

Generating the Gitlab SSH key pair

将 Gitlab SSH 密钥添加到您的个人资料中

请记住,私钥留在您的计算机上,而公钥应在 Gitlab 服务器上。因此,在生成 SSH 密钥后,您的下一步是将公钥上传到您的 Gitlab 帐户。要执行此操作,请按照以下步骤进行。

1. 在 VSCode 中打开您的公钥文件。在资源管理器窗格中,展开 .ssh 文件夹并点击 id_es25519.pub。接下来,选择公钥并将其复制到剪贴板。

Copying the public key

2. 现在,打开一个网络浏览器,转到 https://gitlab.com,并登录您的 Gitlab 帐户。

3. 登入後,前往位於 https://gitlab.com/-/profile/keys 的SSH 金鑰個人資料設定。

  • 將之前複製的公鑰貼到金鑰欄位中。
  • 標題欄位將自動填入您公鑰的註解部分。將標題值保留不變,或輸入您偏好的值。
  • 可選擇在到期日欄位指定到期日期。
  • 最後,點擊新增金鑰
Adding the Gitlab SSH key to your profile

使用您的 Gitlab SSH 金鑰

到目前為止,您已產生了 SSH 金鑰並將其上傳到您的 Gitlab 帳戶。剩下的是測試您的 SSH 金鑰是否有效,方法是使用它連線並驗證到 Gitlab。

登錄

在 VS Code 終端上,執行以下命令連線到您的 Gitlab 帳戶。

ssh -T [email protected]

假設您是第一次連線,該命令會提示您驗證主機的真實性並確認連線。在提示處輸入yes並按Enter確認。

注意,您無需輸入使用者名稱和密碼即可登錄?相反,ssh 命令會自動使用您的 SSH 金鑰進行驗證。成功登錄後,您應該會看到一條歡迎消息,顯示“歡迎來到 Gitlab @username!“。

Logging in to Gitlab via SSH

發佈新專案

您已確認您的 Gitlab SSH 金鑰有效並讓您成功驗證。但是,當您透過 Git 與 Gitlab 進行互動時,它是否也有效?不妨試試通過發佈一個新的 Gitlab 存儲庫來進行測試?

1. 首先,初始化 Git 配置并使用您的 Gitlab 帐户用户名和电子邮件地址进行设置。在 VS Code 终端中,运行以下git config 命令分别指定您的 Gitlab 用户名和电子邮件地址。

git config --global user.name "your_username"
git config --global user.email "[email protected]"

您运行的命令应该更新或创建~/.gitconfig文件,并使用您提供的信息。

Initializing the Git configuration

2. 接下来,在您的主目录下创建一个新的存储库文件夹。将新文件夹命名为my-first-project

文件夹名称还将成为您的 Gitlab 存储库项目名称

# 创建一个新文件夹
mkdir ~/my-first-project
# 将工作目录更改为新文件夹
cd ~/my-first-project

3. 运行下面的命令初始化存储库。确保将<username>更改为您的 Gitlab 用户名。

git init

您应该看到类似于下方截图的确认消息。

Initializing a new repository

4. 接下来,为您的项目指定远程 Git 存储库地址。此存储库地址确定您是使用 SSH 密钥还是用户名和密码进行身份验证。

查找下面的语法,其中<username>是您的 Gitlab 用户名,<project-name>是 Gitlab 存储库名称。请注意,存储库地址以[email protected]开头,这表示您将使用 SSH 密钥进行身份验证,而不是用户名和密码。

git remote add origin git@gitlab.com:<username>/<project-name>.git

假設Gitlab的使用者名稱是kevin,儲存庫名稱是my-first-project。現在在終端機中執行以下指令。

git remote add origin git@gitlab.com:kevin/my-first-project.git

5. 執行下面的指令在儲存庫中創建一個名為README.md的空白檔案。

touch README.md

6. 開啟README.md檔案進行編輯,將以下內容貼到檔案中。編輯完成後儲存檔案。 My first project to demonstrate Gitlab SSH keys.

My first project to demonstrate Gitlab SSH keys.
Creating a file and adding content

7. 現在,告訴Git將新的README.md檔案加入儲存庫並提交更改。

git add README.md
git commit -m "My first commit"

你應該會看到以下類似的輸出。

Adding a file and committing changes to the repository

8. 最後,是時候將你的新儲存庫發布到Gitlab帳戶了。執行以下指令將儲存庫從你的電腦推送到Gitlab帳戶。

git push --all origin

如下所示,項目的建立成功了,而且沒有要求輸入憑證!Git使用你的SSH金鑰進行Gitlab身份驗證。

Creating a repository in Gitlab

9. 最後,確認你的新Gitlab項目在線上存在。使用瀏覽器,前往https://gitlab.com/dashboard/projects 來查看你現有項目的清單。你應該能看到清單上有my-first-project這個名字。

Viewing the Projects list in Gitlab

10. 此外,點擊項目名稱,你應該能看到README.md檔案和內容顯示出來。

Viewing the README file

結論

恭喜您在本教程中取得了如此大的進展!在這個逐步教程中,您已經學會了如何生成和使用SSH金鑰,以便將安全的版本控制部署到您的GitLab存儲庫中。

有了這些知識,您現在可以在GitLab存儲庫上執行任務,而不必擔心意外地公開您的用戶名和密碼。

您以前使用過GitLab SSH金鑰認證嗎?使用體驗如何?您是否建議其他人也使用SSH金鑰,或者有任何理由不要使用它?請告訴我們。

Source:
https://adamtheautomator.com/gitlab-ssh/