介绍
在设置远程 Linux 服务器时,您需要决定一种安全连接到它的方法。虽然密码是验证用户身份的一种方式,但密码有多个漏洞,可以通过蛮力攻击破解。小号ecure嘘ELL键-更好地称为SSH密钥-经常被用来代替密码,因为它们提供连接到远程Linux服务器的更安全的方法。作为 Secure Shell 加密网络协议的一部分,SSH 密钥还使用户能够通过不安全的网络安全地执行网络服务,例如向远程服务器提供基于文本的命令或配置其服务。
本教程将指导您完成使用 OpenSSH(一套开源 SSH 工具)在 macOS 和 Linux 以及 Windows 上通过使用适用于 Linux 的 Windows 子系统创建 SSH 密钥的步骤。它是为刚开始使用命令行的读者编写的,将提供有关在个人计算机上访问终端的指导。完成本教程后,您将拥有 SSH 密钥,可用于在教程如何在 DigitalOcean Droplet 上设置 Ubuntu 20.04服务器中安全设置服务器,该教程是云课程简介的一部分。
如果您已经熟悉命令行并正在寻找有关使用 SSH 连接到远程服务器的说明,请参阅我们关于为一系列 Linux 操作系统设置 SSH 密钥的教程集。
先决条件
要完成本教程,您需要:
- 运行以下操作系统之一的本地计算机:macOS、Linux 或安装了适用于 Linux 的 Windows 子系统的 Windows。如果您使用的是 Windows,您可以在Microsoft 的文档页面上找到下载或更新适用于 Linux 的 Windows 子系统的说明。请注意,虽然 OpenSSH 应该适用于一系列 Linux 发行版,但本教程已经使用 Ubuntu 20.04 进行了测试。
注意:如果您正在寻找有关如何在没有适用于 Linux 的 Windows 子系统的 Windows 机器上创建 SSH 密钥的说明,请访问我们的产品文档如何在 Windows 上使用 PuTTY 创建 SSH 密钥。
- 熟悉使用终端和命令行。如果您需要介绍如何使用终端和命令行,您可以访问我们的指南A Linux Command Line Primer。
第 1 步 – 了解 SSH 密钥
SSH 密钥是两个长字符串,可用于验证请求访问远程服务器的用户的身份。这些密钥由用户在其本地计算机上使用 SSH 实用程序生成。一个密钥是私有的并存储在用户的本地机器上。另一个密钥是公开的,并与远程服务器或用户希望与之安全通信的任何其他实体共享。
当用户请求使用 SSH 连接到服务器时,服务器会发送一条使用公钥加密的消息,该消息只能通过关联的私钥解密。然后用户的本地机器使用其私钥尝试解密消息。如果消息成功解密,则服务器无需密码即可授予用户访问权限。通过身份验证后,用户可以在其本地终端中启动远程 shell 会话,以将基于文本的命令传送到远程服务器。
在下一步中,您将在计算机上打开一个终端,以便您可以访问用于生成一对 SSH 密钥的 SSH 实用程序。
第 2 步 — 在您的计算机上打开一个终端
终端允许您通过基于文本的命令而不是图形用户界面与计算机进行交互。您在计算机上访问终端的方式取决于您使用的操作系统类型。
在运行 macOS 的机器上,Terminal
应用程序通常位于Utilities
文件夹内的Applications
文件夹中。您也可以通过在Search Spotlight 中搜索“终端”来找到它。
如果您在 Linux 计算机上工作,您的发行版的默认终端应用程序通常也位于Utilities
文件夹内的Applications
文件夹中。您还可以通过使用桌面搜索功能搜索“终端”来找到它。
如果您在运行 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 密钥。这些密钥可用于安全地连接远程服务器,并且是云课程简介中本教程之后的教程如何在 DigitalOcean Droplet 上设置 Ubuntu 20.04 服务器所必需的。
要更深入地了解如何使用 SSH,请访问我们的指南SSH Essentials:使用 SSH 服务器、客户端和密钥。