如何在macOS、Linux或Linux的Windows子系统上使用OpenSSH创建SSH密钥

来自菜鸟教程
跳转至:导航、​搜索

介绍

设置远程 Linux 服务器时,您需要确定一种安全连接到它的方法。 虽然密码是验证用户身份的一种方式,但密码有多个漏洞,可以通过暴力攻击破解。 Secure Shell 密钥 — 更广为人知的是 SSH 密钥 — 通常用于代替密码,因为它们提供了一种更安全的连接远程 Linux 服务器的方法. 作为 Secure Shell 加密网络协议的一部分,SSH 密钥还使用户能够通过不安全的网络安全地执行网络服务,例如向远程服务器提供基于文本的命令或配置其服务。

本教程将指导您通过使用适用于 Linux 的 Windows 子系统在 macOS 和 Linux 以及 Windows 上使用 OpenSSH(一套开源 SSH 工具)创建 SSH 密钥的步骤。 它是为刚开始使用命令行的读者编写的,将提供有关在个人计算机上访问终端的指导。 完成本教程后,您将在教程 How To Set Up an Ubuntu 20.04 Server on a DigitalOcean Droplet 中获得可用于安全设置服务器的 SSH 密钥,这是 介绍的一部分到云课程

如果您已经熟悉命令行并正在寻找有关使用 SSH 连接到远程服务器的说明,请参阅我们关于 设置 SSH 密钥 的一系列 Linux 操作系统的教程集。

先决条件

要完成本教程,您需要:

  • 运行以下操作系统之一的本地计算机:macOS、Linux 或安装了适用于 Linux 的 Windows 子系统的 Windows。 如果您使用的是 Windows,您可以在 Microsoft 的文档页面 上找到有关下载或更新适用于 Linux 的 Windows 子系统的说明。 请注意,虽然 OpenSSH 应该适用于一系列 Linux 发行版,但本教程已使用 Ubuntu 20.04 进行了测试。

注意:如果您正在寻找有关如何在没有适用于 Linux 的 Windows 子系统的 Windows 机器上创建 SSH 密钥的说明,请访问我们的产品文档 如何使用 PuTTY 创建 SSH 密钥视窗


  • 熟悉使用终端和命令行。 如果您需要了解如何使用终端和命令行,可以访问我们的指南 A Linux Command Line Primer

第 1 步 — 了解 SSH 密钥

SSH 密钥是两个长字符串,可用于验证请求访问远程服务器的用户的身份。 这些密钥由用户在其本地计算机上使用 SSH 实用程序生成。 一个密钥是私有的并存储在用户的本地机器上。 另一个密钥是公开的,并与远程服务器或用户希望与之安全通信的任何其他实体共享。

当用户请求使用 SSH 连接到服务器时,服务器会发送一条使用公钥加密的消息,该消息只能由关联的私钥解密。 然后,用户的本地机器使用其私钥尝试解密消息。 如果消息成功解密,服务器将授予用户访问权限而无需密码。 一旦通过身份验证,用户就可以在其本地终端中启动远程 shell 会话,以将基于文本的命令传送到远程服务器。

在下一步中,您将在计算机上打开一个终端,以便您可以访问用于生成一对 SSH 密钥的 SSH 实用程序。

第 2 步 — 在您的计算机上打开终端

终端允许您通过基于文本的命令而不是图形用户界面与计算机进行交互。 您在计算机上访问终端的方式取决于您使用的操作系统类型。

在运行 macOS 的机器上,Terminal 应用程序通常位于 Applications 文件夹内的 Utilities 文件夹中。 您也可以通过在Search Spotlight中搜索“终端”来找到它。

如果您在 Linux 计算机上工作,您的发行版的默认终端应用程序通常也位于 Applications 文件夹内的 Utilities 文件夹中。 您也可以通过使用桌面搜索功能搜索“终端”来找到它。

如果您在运行 Windows Subsystem for Linux 的 Windows 机器上工作,Linux 终端应在安装后立即打开。 您也可以通过使用桌面搜索功能搜索“Ubuntu”来找到它。

找到系统的终端应用程序后,打开一个新的终端窗口。 您的终端应显示您的用户名、美元符号 ($) 和光标。 这是您将开始键入命令以告诉终端要做什么的地方。

在下一步中,您将输入基于文本的命令来生成一对 SSH 密钥。

第 3 步 — 使用 OpenSSH 生成密钥

您的 macOS 或 Linux 操作系统应该已经安装了标准的 OpenSSH 工具套件。 这套工具包括实用程序 ssh-keygen,您将使用它来生成一对 SSH 密钥。

在终端中输入以下命令:

ssh-keygen

然后将提示您选择密钥的位置。 默认情况下,密钥存储在 ~/.ssh 目录中,私钥为 id_rsa,公钥为 id_rsa.pub。 使用默认位置允许您的 SSH 客户端在进行身份验证时自动找到您的 SSH 密钥,因此我们建议接受这些默认选项。 为此,请按 ENTER

OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_rsa):

<$>[警告] 警告 :如果您之前已生成密钥对,系统会提示您确认是否确实要覆盖现有密钥:

Output/home/sammy/.ssh/id_rsa already exists.
Overwrite (y/n)?

如果您选择覆盖磁盘上的密钥,您将无法再使用以前的密钥进行身份验证。 选择“是”是一个不可逆转的破坏性过程。

如果您确定要覆盖磁盘上的现有密钥,可以通过按 Y 然后按 ENTER 来实现。 <$>

如果您选择默认位置,您的公钥将位于 /home/sammy/.ssh/id_rsa.pub,而您的私钥将位于 /home/sammy/.ssh/id_rsa。 请注意,在您的文件路径中,sammy 将替换为您的用户名。

选择密钥的位置后,系统将提示您输入一个可选密码,用于加密磁盘上的私钥文件。

如果您输入密码,则每次使用此密钥时都必须提供密码(除非您正在运行存储解密密钥的 SSH 代理软件)。 我们建议使用密码,但您只需按 ENTER 即可绕过此提示:

OutputCreated directory '/home/sammy/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

在最后的提示之后,您的系统将生成 SSH 密钥对:

OutputYour identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:EX:AM:PL:E3:3e:a9:de:4e:77:11:58:b6:90:26 sammy@203.0.113.0
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

您现在拥有一个可用于身份验证的公钥和私钥。

结论

恭喜,您现在已经生成了一对 SSH 密钥。 这些密钥可用于与远程服务器安全连接,并且对于教程 How To Set Up an Ubuntu 20.04 Server on a DigitalOcean Droplet 是必要的,该教程遵循 云课程简介中的本教程

要更深入地了解如何使用 SSH,请访问我们的指南 SSH Essentials: Working With SSH Servers, Clients, and Keys