重视网络安全,使用 SSH 密钥进行远程登录。相比密码,它们是更安全的连接方式。本文将向您展示如何在 Linux 环境中生成、安装和使用 SSH 密钥。
为什么说密码存在问题?
安全外壳 (SSH) 是一种加密协议,用于登录远程 Linux 或类 Unix 计算机上的用户账户。通常,这些用户账户通过密码进行保护。当您登录远程计算机时,必须提供您所登录账户的用户名和密码。
密码是保护计算资源访问最常见的方式。然而,基于密码的安全性确实存在缺陷。人们倾向于选择弱密码、共享密码或在多个系统上使用相同的密码,这都带来了安全隐患。
SSH 密钥则更为安全。一旦设置完毕,它们的使用便利性与密码无异。
SSH 密钥如何保证安全?
SSH 密钥以成对的方式生成和使用。这两个密钥相互关联,并以加密方式保障安全。一个是您的公钥,另一个是您的私钥。它们与您的用户账户绑定。如果一台计算机上的多个用户使用 SSH 密钥,则每个人都会获得自己的一对密钥。
您的私钥(通常)存储在您的主文件夹中,而公钥则安装在您需要访问的远程计算机上。
必须妥善保管您的私钥。如果其他人能够访问它,其后果就如同他们获得了您的密码。一个明智且强烈推荐的预防措施是用强加密密码对您的私钥进行保护。您可以使用一个 密码。
公钥可以自由共享,不会对您的安全造成威胁。通过检查公钥无法推断出私钥的内容。私钥可以加密消息,并且只有对应的私钥才能解密。
当您发起连接请求时,远程计算机使用您的公钥副本创建加密消息。该消息包含会话 ID 和其他元数据。只有拥有私钥的计算机(也就是您的计算机)才能解密此消息。
您的计算机访问私钥并解密消息。然后,它将自己的加密消息发送回远程计算机。此消息中包含从远程计算机接收到的会话 ID。
远程计算机现在可以确认您的身份,因为只有您的私钥才能从发送到您计算机的消息中提取会话 ID。
确保可以访问远程计算机
首先,请确保您可以通过远程方式连接并登录远程计算机。这验证了您的用户名和密码在远程计算机上设置了有效账户,且您的凭据是正确的。
在确认您可以使用密码成功通过 SSH 连接到目标计算机之前,请勿尝试使用 SSH 密钥执行任何操作。
在本例中,用户名为 dave 的用户登录名为 wdzwdz 的计算机。他将连接到另一台名为 Sulaco 的计算机。
他输入以下命令:
ssh [email protected]
系统会要求输入密码。输入密码后,用户便连接到 Sulaco。他们的命令行提示符随之改变,以确认这一点。
这就是我们所需要的所有确认。用户 dave 现在可以使用 exit
命令断开与 Sulaco 的连接:
exit
他们收到断开连接的消息,并且命令行提示符返回到 [email protected]
创建一对 SSH 密钥
以下说明已在 Ubuntu、Fedora 和 Manjaro 等 Linux 发行版上进行了测试。在所有情况下,流程都相同,无需在任何测试机器上安装额外软件。
要生成 SSH 密钥,请键入以下命令:
ssh-keygen
生成过程开始。系统会询问您希望将 SSH 密钥存储在何处。按 Enter 键接受默认位置。该文件夹的权限设置可确保只有您可以访问它。
现在,系统会要求您输入密码。我们强烈建议您在此处设置一个密码。请务必记住它!您可以通过按 Enter 键不输入密码,但这并非明智之举。由三到四个不相关的单词组合而成的密码短语会是一个非常强大的密码短语。
系统会要求您再次输入相同的密码,以验证您输入的内容是否正确。
SSH 密钥已为您生成并存储。
您可以忽略显示的“randomart”。某些远程计算机可能会在您每次连接时向您显示它们的随机艺术。其目的是让您辨识随机艺术是否发生变化。如果发生变化,则您应怀疑连接的安全性,因为这可能意味着服务器的 SSH 密钥已被更改。
安装公钥
我们需要在远程计算机 Sulaco 上安装您的公钥,以便其识别该公钥属于您。
我们使用 ssh-copy-id
命令完成此操作。此命令与常规 ssh
命令一样连接到远程计算机,但不允许您登录,而是传输您的公共 SSH 密钥。
ssh-copy-id [email protected]
虽然您没有登录到远程计算机,但仍必须使用密码进行身份验证。远程计算机需要识别新的 SSH 密钥属于哪个用户账户。
请注意,您必须在此处提供的密码是您要登录的远程用户账户的密码。这与您刚刚创建的 SSH 密钥密码不同。
验证密码后,ssh-copy-id
会将您的公钥传输到远程计算机。
您将返回到本地计算机的命令提示符。您没有与远程计算机保持连接。
使用 SSH 密钥连接
让我们尝试按照建议连接到远程计算机。
ssh [email protected]
由于连接过程需要访问您的私钥,并且您已用密码保护了 SSH 密钥,因此您需要提供您的密码以便连接能够继续。
输入您的密码,然后单击解锁按钮。
在终端会话中输入密码后,只要您保持终端窗口开启,就不必再次输入密码。您可以根据需要连接和断开任意数量的远程会话,而无需再次输入密码。
您可以勾选“每当我登录时自动解锁此密钥”选项,但这会降低您的安全性。如果您的计算机处于无人看管状态,任何人都可能连接到那些拥有您的公钥的远程计算机。
输入密码后,您将连接到远程计算机。
为了再次验证此过程,请使用 exit
命令断开连接,然后从同一终端窗口重新连接到远程计算机。
ssh [email protected]
现在,您无需密码即可连接到远程计算机。
既安全又方便
网络安全专家常谈论一种叫做安全摩擦的概念。为了获得更高的安全性,您需要承担一些额外的麻烦。采用更安全的工作方式通常需要额外的步骤,但大多数人都不喜欢这样。他们实际上更喜欢较低的安全性和较少的摩擦。这可以说是人性使然。
通过使用 SSH 密钥,您可以同时获得更高的安全性和便利性,这无疑是一个双赢的局面。