如何在 Ubuntu 12.04 上设置 SSH 密钥
介绍
安全外壳协议(或 SSH)是一种加密网络协议,允许用户通过不安全的网络安全地访问远程计算机。
虽然 SSH 支持基于密码的身份验证,但通常建议您改用 SSH 密钥。 SSH 密钥是一种更安全的登录 SSH 服务器的方法,因为它们不易受到常见的暴力破解密码攻击。
生成 SSH 密钥对会创建两个长字符串:公钥和私钥。您可以将公钥放在任何服务器上,然后使用有权访问私钥的 SSH 客户端连接到服务器。
当公钥和私钥匹配时,SSH 服务器无需密码即可授予访问权限。您可以通过使用可选(但强烈推荐)密码保护私钥来进一步提高密钥对的安全性。
注意:如果您正在寻找有关在您的 DigitalOcean 帐户中设置 SSH 密钥的信息,请参阅我们关于 SSH 密钥的 DigitalOcean 产品文档
第 1 步 — 创建密钥对
第一步是在客户端计算机上创建密钥对。这可能是您的本地计算机。在本地命令行中键入以下命令:
- ssh-keygen -t ed25519
OutputGenerating public/private ed25519 key pair.
您将看到密钥生成过程已开始的确认信息,系统将提示您提供一些信息,我们将在下一步中讨论这些信息。
注意:如果您使用的是不支持创建 ed25519
密钥对的旧系统,或者您要连接的服务器不支持它们,您应该创建一个强 rsa
改为密钥对:
- ssh-keygen -t rsa -b 4096
这会将 -t
\type 标志更改为 rsa
,并添加 -b 4096
\bits” 标志以创建 4096 位钥匙。
第 2 步 — 指定保存密钥的位置
ssh-keygen
命令的第一个提示将询问您将密钥保存在何处:
OutputEnter file in which to save the key (/home/sammy/.ssh/id_ed25519):
您可以在此处按 ENTER
将文件保存到主目录的 .ssh
目录中的默认位置。
或者,您可以选择另一个文件名或位置,方法是在提示后键入它并按 ENTER
。
第 3 步 — 创建密码
ssh-keygen
的第二个也是最后一个提示将要求您输入密码:
OutputEnter passphrase (empty for no passphrase):
是否要使用密码由您决定,但强烈建议您这样做:无论采用何种加密方案,密钥对的安全性仍然取决于其他任何人都无法访问的事实。
如果没有密码的私钥落入未经授权的用户手中,他们将能够登录到您使用相关公钥配置的任何服务器。
使用 ssh-agent
服务可以缓解使用密码短语(输入密码短语)的主要缺点,该服务将临时存储您解锁的密钥并使其可供 SSH 客户端访问。其中许多代理都与您操作系统的本机钥匙串集成,使解锁过程更加无缝。
回顾一下,整个密钥生成过程如下所示:
- ssh-keygen -t ed25519
OutputGenerating public/private ed25519 key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sammy/.ssh/id_ed25519
Your public key has been saved in /home/sammy/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:EGx5HEXz7EqKigIxHHWKpCZItSj1Dy9Dqc5cYae+1zc sammy@hostname
The key's randomart image is:
+--[ED25519 256]--+
| o+o o.o.++ |
|=oo.+.+.o + |
|*+.oB.o. o |
|*. + B . . |
| o. = o S . . |
|.+ o o . o . |
|. + . ... . |
|. . o. . E |
| .. o. . . |
+----[SHA256]-----+
公钥现在位于 /home/sammy/.ssh/id_ed25519.pub
。私钥现在位于 /home/sammy/.ssh/id_ed25519
。
第 4 步 — 将公钥复制到您的服务器
生成密钥对后,就可以将公钥放在您要连接的服务器上了。
您可以使用 ssh-copy-id
命令将公钥复制到服务器的 authorized_keys
文件中。确保替换示例用户名和地址:
- ssh-copy-id sammy@your_server_address
命令完成后,您将能够通过 SSH 登录服务器,而无需提示输入密码。但是,如果您在创建 SSH 密钥时设置了密码,则系统会要求您输入密码。这是要求您解密私钥的本地 ssh
客户端,它不是要求密码的远程服务器。
第 5 步 — 禁用基于密码的 SSH 身份验证(可选)
将 SSH 密钥复制到服务器后,您可能希望通过将 SSH 服务器配置为禁用基于密码的身份验证来完全禁止密码登录。
警告:在禁用基于密码的身份验证之前,请确保您可以使用 SSH 密钥成功登录到服务器,并且服务器上没有其他用户使用密码登录。
为了禁用基于密码的 SSH 身份验证,请打开 SSH 配置文件。它通常位于以下位置:
- sudo nano /etc/ssh/sshd_config
此命令将在 nano
文本编辑器中打开文件。在文件中找到包含 PasswordAuthentication
的行(如果不存在则创建该行),确保它没有在开头用 #
注释掉该行,并将其更改为 no
:
PasswordAuthentication no
完成后保存并关闭文件。在nano
中,使用CTRL+O
保存,按ENTER
确认文件名,然后按CTRL+X
出口。
重新加载 sshd
服务以使这些更改生效:
- sudo systemctl reload sshd
在退出当前 SSH 会话之前,在另一个终端中建立测试连接以验证您仍然可以连接。
结论
在本教程中,我们创建了一个 SSH 密钥对,将我们的公钥复制到服务器,并(可选)完全禁用基于密码的身份验证。
有关 SSH 和 SSH 服务的更多信息,包括如何设置多因素身份验证,请阅读我们的相关教程:
- 如何使用 SSH 连接到远程服务器
- SSH 基础知识:使用 SSH 服务器、客户端和密钥
- 如何在 Ubuntu 20.04 上为 SSH 设置多重身份验证