仅使用密码保护您的Linux 服务器已不再有效(它们容易受到在线和离线破解和字典攻击,而且人们历来在维护安全密码方面做得很糟糕):您必须使用 SSH 密钥来保护它。本教程将教您什么是 SSH 密钥以及如何用基于 SSH 密钥的身份验证替换默认的 Linux 密码身份验证。
请注意,我在本教程中使用了jtti VPS,但本指南适用于任何其他提供商的任何虚拟服务器。此外,我还提供了分步视频指南和书面教程。
什么是 SSH 密钥?
SSH 密钥是安全 Shell 密钥的缩写。网络安全研究员 Tatu Ylönen于 1995 年创建了 SSH,现在每台 Unix、Linux 和 Mac 电脑都自带了 SSH。它们还适用于每个平台,是所有云基础设施的重要组成部分。
为什么我应该使用 SSH 密钥而不是密码?
在您读完这句话之前,“真正的 Holyfield”黑客就可以破解您服务器的密码(PSA:始终使用Bitwarden等密码管理器来确保您的密码安全)。黑客可以使用久经考验的攻击或其他更复杂的方法进入您的服务器。
现在,我们不是来向您讲授安全卫生或最佳做法的(您可以非常欢迎阅读带有令人翻白眼的“穿连帽衫的黑客”库存照片的恐吓文章)。但是,我们确实想强调的是,SSH 密钥是保护服务器的安全之道,因为它比任何密码都要长得多、复杂得多。与密码不同,SSH 密钥不会发送到服务器。不过,您必须使用密码保护您的 SSH 密钥。
如何生成 SSH 密钥
SSH 使用预先生成的公钥和私钥(因此称为 SSH 密钥对)。这些公钥和私钥是通过非对称密钥加密形成的,并会存储起来以备将来使用。作为最佳实践,我们建议为新设备生成新密钥(这样更安全),但这确实需要重新建立信任关系。
如何验证 SSH 密钥
公钥保存在你的服务器上,而私钥保存在你的计算机上。如果你尝试登录你的服务器,服务器将生成一个随机字符串并使用公钥对其进行加密。你可以使用私钥解密该字符串(这是解密该字符串的唯一方法)。
然后,服务器将这个加密字符串发送到您的计算机。您的计算机将使用私钥对其进行解密,并将解密后的字符串发送回服务器。如果计算机上解密的字符串与服务器上的原始字符串匹配,您就可以访问您的服务器。
如何为 Linux 生成 SSH 密钥
打开终端并输入以下命令来生成一对密钥(假设您的本地计算机运行 Linux):
ssh-keygen -t rsa
注意:您可能需要根据您的 Linux 版本选择文件名和文件保存目标。
这是保存密钥的默认路径:
/根/.ssh
id_rsa 是您的私钥,而 id_rsa.pub 是您的公钥。
如何为 Windows 生成 SSH 密钥
如果您的本地计算机运行 Windows,我们建议安装PuTTY,免费的开源 SSH 和终端仿真器(它还包括 PuTTYgen)。
安装PuTTY后,打开Windows搜索栏并搜索“PuTTYgen”。
打开之后会出现这个画面:
使用 PuTTY 密钥生成器为 Windows 生成 SSH 密钥。
PuTTY 密钥生成器具有生成 SSH 密钥的所有功能。
只需单击“生成”并将鼠标移到空白字段上。
您的密钥将生成:
Windows 的 PuTTY 密钥生成器可以使用 RSA、DSA、ECDSA、ED25519 和 SSH-1(RSA)算法创建 SSH 密钥。
看看那个公钥!它是如此公开(并且希望是安全的)。
如何向现有公钥和私钥添加注释(可选)
您可以在 SSH 密钥后输入空格并输入注释,从而为其添加注释。如果您查阅BSD 系统管理器手册,就会发现以 # 开头的行被视为注释。
如何分配密钥密码(可选,但推荐)
分配密钥密码将通过本地加密(和解密)您的私钥来增强私钥的安全性。每当您连接到服务器时,您都需要输入密钥密码(密钥密码是连接到服务器的另一层安全保障 - 几乎类似于 2FA)。
如何将 SSH 公钥上传到你的服务器
创建密钥对后,您需要将公钥上传到您的服务器。您可以通过 FTP 或服务器控制台上传公钥。
通过 FTP 上传公钥
如果您想使用 FTP 上传公钥,请启动 FTP 程序并以 root 身份连接到服务器。在根目录中创建以下目录:
.ssh
现在在此文件夹中创建 authorized_keys 文本文件并将整个公钥粘贴到其中。现在保存文件。
通过控制台上传公钥
通过 SSH 以 root 身份登录。使用此命令,您可以创建正确的目录并同时切换到该目录:
mkdir /root/.ssh && cd /root/.ssh
现在使用以下命令创建并打开authorized_keys文本文件:
nano authorized_keys
粘贴您的整个公钥并按 [CTRL+O] 保存文件。要退出编辑器,请使用 [CTRL+X]
如何在PuTTY中使用SSH私钥:
创建由私钥和公钥组成的密钥对并将公钥上传到服务器后,您需要将私钥插入 PuTTY。
为此,请打开 PuTTY。
在左侧的“类别”下,您会看到“窗口”和“连接”等类别列表。请按照以下四个步骤选择您的私钥:
1:点击“连接”展开。
2:点击“SSH”旁边的“[+]”。
3:点击“Auth”在右侧打开一个窗口
4:点击“浏览”选择你的私钥
按照这四个步骤通过 PuTTY 密钥生成器选择您的私钥。
您可以通过四个步骤通过 PuTTY 密钥生成器选择您的私钥。
现在向上滚动左侧列表并单击“Session”。
输入您的服务器的 IP 地址并在“已保存的会话”字段中选择一个配置文件名称。
单击“保存”按钮保存您的个人资料。
PuTTY 设置 2
现在您已经使用私钥在 PuTTY 中创建了一个配置文件。
如何在 Pageant 中使用您的 SSH 私钥:
除了将您的私钥插入 PuTTY,您还可以使用 Pageant。
Pageant 是一个 SSH 代理,与 PuTTY 一起提供。
有了这个程序,使用私钥连接到您的服务器就更容易了。
如果您使用 Pageant,则无需一遍又一遍地输入密码,只要您使用密码保护了您的私钥。
首先,在 Windows 搜索栏中搜索 Pageant。执行此程序后,它将出现在 Windows 系统托盘中:
要将私钥导入 Pageant,请右键单击 Pagent 图标,然后单击“添加密钥”。
文件资源管理器将打开,您需要选择您的私钥。如果您决定使用密码保护您的私钥,系统将要求您输入密码。
现在,您只需登录到您的服务器,而无需在每次启动 SSH 连接时提示您输入密码。
注意:重启本地计算机后,您需要再次导入您的私钥。
测试 SSH 密钥验证并禁用密码验证:
成功生成密钥对、将公钥上传到服务器并使用私钥创建 PuTTY 配置文件后,现在是时候测试新的登录方法是否有效了。
测试 SSH 密钥认证
要测试您的新身份验证方法是否有效,只需使用您刚刚创建的 PuTTY 配置文件登录到您的服务器。双击配置文件后,将打开一个控制台,提示您输入您的用户名,通常是root。
输入用户名并按 [Enter] 确认后,您将登录。除此之外,登录过程中将出现以下消息:“使用公钥 <key comment> 进行身份验证”。
禁用密码验证
选择 ssh-key 认证作为登录方式的原因是为了服务器安全。因此,现在禁用密码认证是合乎逻辑的。
为此,请使用以下命令打开 sshd_config:
nano /etc/ssh/sshd_config
现在将以下值设置为“否”:
质询响应认证
密码验证
使用PAM
为了避免滚动整个配置来查找需要更改的值,您可以按 [CTRL+W] 打开搜索字段。输入值的名称,然后按 Enter。
如果某些值前面有 # 注释掉,只需将其删除即可。
使用 [CTRL+O] 保存更改并使用 [CTRL+X] 关闭编辑器
删除 SSH 密钥验证并重新启用密码验证:
如果您想返回密码验证,您只需将 sshd_config 中的值设置回“是”。
然后使用以下命令删除 .ssh 文件夹及其内容:
rm -R /root/.ssh
使用以下命令重新启动 ssh 服务:
systemctl restart ssh