如何生成和使用GitLab SSH密钥

重复的用户名和密码提示令人讨厌且浪费时间。如果您在Gitlab帐户中使用密码验证,每个操作都需要您发送凭据,无论是作为命令的一部分还是通过交互提示。

特别是在自动化GitLab中的CI/CD流水线时,密码验证可能效率低下且存在安全风险。为什么不结束您的痛苦,转而使用Gitlab SSH密钥进行Secure Shell (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帐户。剩下的是通过使用它连接和验证到Gitlab来测试您的SSH密钥是否有效。

登录

在VS Code终端上,通过运行下面的命令连接到您的Gitlab帐户。

ssh -T [email protected]

假设您是首次连接,则命令会提示您验证主机的真实性并确认连接。在提示处输入yes并按Enter确认。

请注意,您无需输入用户名和密码即可登录吗?相反,ssh命令会自动使用您的SSH密钥进行验证。成功登录后,您应该会看到一个欢迎消息,显示“欢迎来到Gitlab @用户名!”。

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 账户。

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/