介绍
安全壳协议(或SSH)是一种加密网络协议,允许用户通过不受保护的网络安全访问远程计算机。
虽然SSH支持基于密码的身份验证,但一般建议您使用 _SSH 密钥。SSH 密钥是登录 SSH 服务器的更安全方法,因为它们不容易受到常见的暴力密码黑客攻击。
生成一个 SSH 密钥对会创建两个长字符串:一个公共密钥和一个私钥. 您可以将公共密钥放置在任何服务器上,然后使用具有访问私钥的 SSH 客户端连接到服务器。
当公钥和私钥相匹配时,SSH服务器允许访问,而无需密码. 您可以通过使用可选(但强烈建议)密码来保护私钥来进一步提高密钥对的安全性。
<$>[info] 注: 如果您在您的 DigitalOcean 帐户中寻找有关设置 SSH 密钥的信息,请参阅我们的 DigitalOcean 关于 SSH 密钥的产品文档 <$>
步骤 1 - 创建关键对
第一步是在客户端机器上创建一个密钥对,这可能是您的本地计算机,然后在本地命令行中输入以下命令:
1[environment local]
2ssh-keygen -t ed25519
1[secondary_label Output]
2[environment local]
3Generating public/private ed25519 key pair.
您将看到确认关键生成过程已经开始,并将提示您一些信息,我们将在下一步讨论。
<$>[注]
注: 如果您在较旧的系统中不支持创建ed25519
密钥对,或者您正在连接的服务器不支持它们,您应该创建一个强大的rsa
密钥对:
1ssh-keygen -t rsa -b 4096
这将t``类型
的旗帜更改为rsa
,并添加b 4096``bits
的旗帜来创建一个4096位的密钥。
步骤 2 – 指定存储密钥的位置
「ssh-keygen」命令的第一個提示會問你在哪裡儲存鑰匙:
1[secondary_label Output]
2[environment local]
3Enter file in which to save the key (/home/sammy/.ssh/id_ed25519):
您可以在这里按ENTER
,将文件保存到您的主目录的.ssh
目录中的默认位置。
或者,您可以选择另一个文件名称或位置,通过在提示后键入它并点击ENTER
。
步骤 3 – 创建一个 Passphrase
ssh-keygen
的第二个和最后的提示将要求您输入一个密码:
1[secondary_label Output]
2[environment local]
3Enter passphrase (empty for no passphrase):
您是否想要使用密码是由您决定的,但强烈鼓励:密钥对的安全性,无论加密方案如何,仍然取决于它不能被其他人访问。
如果一个没有密码的私钥落入未经授权的用户的所有权,他们将能够登录任何您已配置的服务器与相关的公共密钥。
拥有一个密码的主要缺点 - 输入它 - 可以通过使用一个ssh代理
服务来缓解,这将暂时存储您的解锁密钥,并使其可访问到SSH客户端。
要总结一下,整个关键生成过程看起来是这样的:
1[environment local]
2ssh-keygen -t ed25519
1[secondary_label Output]
2[environment local]
3Generating public/private ed25519 key pair.
4Enter file in which to save the key (/home/sammy/.ssh/id_ed25519):
5Enter passphrase (empty for no passphrase):
6Enter same passphrase again:
7Your identification has been saved in /home/sammy/.ssh/id_ed25519
8Your public key has been saved in /home/sammy/.ssh/id_ed25519.pub
9The key fingerprint is:
10SHA256:EGx5HEXz7EqKigIxHHWKpCZItSj1Dy9Dqc5cYae+1zc sammy@hostname
11The key's randomart image is:
12+--[ED25519 256]--+
13| o+o o.o.++ |
14|=oo.+.+.o + |
15|*+.oB.o. o |
16|*. + B . . |
17| o. = o S . . |
18|.+ o o . o . |
19|. + . ... . |
20|. . o. . E |
21| .. o. . . |
22+----[SHA256]-----+
公钥现在位于 /home/sammy/.ssh/id_ed25519.pub
. 私钥现在位于 /home/sammy/.ssh/id_ed25519
。
步骤 4 – 将公共密钥复制到您的服务器
一旦生成密钥对,是时候将公共密钥放置在您想要连接的服务器上。
您可以使用ssh-copy-id
命令将公共密钥复制到服务器的authorized_keys
文件中,请确保更换示例用户名和地址:
1[environment local]
2ssh-copy-id sammy@your_server_address
一旦命令完成,您将能够通过SSH登录服务器,而无需请求密码。但是,如果您在创建SSH密钥时设置了密码,您将被要求在那个时候输入密码。
步骤 5 — 禁用基于密码的 SSH 身份验证(可选)
将 SSH 密钥复制到服务器后,您可能希望通过配置 SSH 服务器以禁用基于密码的身份验证来完全禁止密码登录。
<$>[警告] **警告:**在您禁用基于密码的身份验证之前, **请确保您可以使用 SSH 密钥成功登录服务器,并且没有其他用户使用密码登录服务器。
若要禁用基于密码的 SSH 身份验证,请打开 SSH 配置文件。
1sudo nano /etc/ssh/sshd_config
这个命令将打开文本编辑器中的nano
文件,在文件中找到包含PasswordAuthentication
的行(或创建行,如果它不存在),确保它没有被评论为#
在行开始时,并将其更改为不
:
1[label /etc/ssh/sshd_config]
2PasswordAuthentication no
在nano
中,使用CTRL+O
来保存,按ENTER
来确认文件名,然后按CTRL+X
来退出。
重新加载sshd
服务以实施这些更改:
1sudo systemctl reload sshd
在退出当前 SSH 会话之前,在其他终端进行测试连接,以验证您仍然可以连接。
结论
在本教程中,我们创建了一个SSH密钥对,将我们的公共密钥复制到服务器,并(可选)完全禁用基于密码的身份验证。
有关 SSH 和 SSH 服务的更多信息,包括如何设置多因素身份验证,请阅读我们的相关教程:
- 如何使用SSH连接到远程服务器
- SSH Essentials: 使用SSH服务器,客户端和密钥
- [如何在Ubuntu 20.04上设置SSH的多因素身份验证(https://andsky.com/tech/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-20-04)