如何为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密码进行身份验证时,会发生以下情况:

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密钥对:

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在后台运行。

eval `ssh-agent`
# Agent pid 334065

如果您收到与此类似的消息,如果一切正常。这意味着ssh-agent在特定的进程ID (PID) 下运行。

2. 将您的SSH私钥(没有扩展名的私钥)添加到 ssh-agent。

ssh-add ~/.ssh/wbolt_keys

wbolt_keys替换为SSH密钥的名称。如果这是您创建的第一个密钥,则应将其命名为“id_algorithm_used”,例如id_ed25519

将SSH密钥添加到GitHub帐户

最后一步是将您的公钥添加到您的GitHub帐户。只需按照以下说明操作:

1. 将SSH公钥复制到剪贴板。您可以使用文本编辑器打开文件所在的位置并复制它,或使用终端显示其内容。

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:

git clone git@github.com: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">
...

简单的HTML网站

简单的HTML网站

我们没有使用任何JavaScript或CSS来保持此编辑的简单性。

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

git commit -am "Added a simple title"

并像往常一样将它们推送到GitHub。

git push

如果一切顺利,恭喜!你只需在你的机器和GitHub之间建立一个SSH连接。

管理不同GitHub帐户的多个SSH密钥

如果您有多个GitHub帐户(假设一个用于您的个人项目,一个用于您的工作),则很难将SSH用于这两个帐户。您通常需要不同的机器来对不同的GitHub帐户进行身份验证。

但这可以通过配置SSH配置文件轻松解决。

让我们开始吧。

1. 创建另一个SSH密钥对,并将其添加到您的另一个GitHub帐户。请记住您要为其分配新密钥的文件的名称。

ssh-keygen -t ed25519 -C "work@email.com"

2. 创建SSH配置文件。配置文件告诉ssh程序它应该如何运行。默认情况下,配置文件可能不存在,所以在 .ssh/ 文件夹中创建它:

touch ~/.ssh/config

3. 修改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地址,来自:

git@github.com:workaccount/project.git

…到:

git@github-work:workaccount/project.git

小计

恭喜——你已经学会了通过SSH连接到GitHub所需的大部分实用知识!

本教程讨论了对SSH协议的需求、公钥和私钥的区别、如何生成密钥、将它们添加到GitHub,甚至为不同的GitHub帐户管理多个SSH密钥。请记住,除非您想失去对所有内容的访问权限,否则您的私钥需要保持这种状态:私有。

评论留言