验证 Digital Ocean droplet(FreeBSD)上 SSH 主机的真实性

验证 Digital Ocean droplet(FreeBSD)上 SSH 主机的真实性

首次通过连接时SSH新铸造的数字海洋Droplet虚拟机正在运行FreeBSD(每本教程),我们收到一条消息“无法确定主机 blah-blah 的真实性”。我明白这意味着我的电脑没有存储指纹与之比较。所以我的 SSH 客户端无法知道另一端的 SSH 服务器是否合法。

此时,我们有两个选择:

  • 我们可以盲目地继续前进,按照TOFU“首次使用即信任”反安全模型。如果我们成为中间人攻击,我们就落入了他们的圈套。
  • 或者我们可以通过其他方式发现服务器的指纹,然后与第一次连接时显示的指纹进行比较。

亚马逊为其 EC2 实例提供了这样一种机制,用于学习新服务器的指纹,这里讨论

➥ 是否存在这样的机制数字海洋“droplet”虚拟机实例,学习服务器的指纹?

答案1

我知道这是一个老问题,但是我今天遇到了完全相同的问题,并且 OP 对 TOFU 反安全模型的指出是正确的,所以这就是我用来避免 MITM 风险的方法。

通常,正如问题所暗示的那样,真的没有办法无需与服务器管理员交谈即可验证密钥。然而...

...如果你ssh-keygen -lf有权访问服务器,您可以通过在公钥或私钥上运行来显示 SSH 密钥的指纹......

...幸运的是,目前 DigitalOcean 提供了一个基于 Web 的控制台,可以直接登录到 droplet,从而让您可以访问相关服务器。要进入控制台:

  • 前往您的帐户仪表板。
  • 在侧边栏的“管理”标题下,选择“Droplets”。
  • 选择您想要验证指纹的液滴。
  • 它可能会默认显示“图表”子部分,但您需要选择“访问”子部分。
  • 从那里您应该会看到“启动控制台”或“重置根密码”的选项。

现在,由于 DigitalOcean 控制台要求您以 root 身份登录,因此您需要一个 root 密码。因此,如果您像我一样,在最初设置 droplet 时选择使用更安全的 SSH 身份验证,则可以省去一些麻烦,先选择“重置 Root 密码”。一旦 DigitalOcean 向您发送新的 root 密码,请按以下步骤操作:

  • 选择“启动控制台”。要登录,用户名是root,密码是您设置的密码(或 DigitalOcean 发送给您的重置代码)。提示:控制台确实接受复制粘贴,这对于密码重置代码很有用。此外,对于重置,您将立即被要求确认重置代码并选择新密码,因此请做好准备。
  • 进入后,无论cd你的 droplet 操作系统存储系统级 SSH 密钥的位置如何(对于我来说,在 Ubuntu 18.04 上,它位于 下/etc/ssh;我使用了这个答案)。
  • 从那里,运行以下 bash 脚本(或类似操作系统的 shell)以查看所有密钥的所有指纹:(for file in *; do ssh-keygen -lf $file; done;我将其作为一行代码执行,标点符号如图所示,它对我来说是有效的;不知道它是否是惯用的 bash 脚本。如果它遇到非密钥或受密码保护的私钥文件,它会注意到这一事实并将它们无害地传递下去。它是从这个有用的网站
  • 将显示的输出与原始 SSH 真实性质询进行比较。如果不匹配,则说明存在中间人风险,不应接受密钥。

如果有人知道更简单的方法,例如通过 DigitalOcean 通信或仪表板的某些隐藏部分获取指纹信息,请随时发布另一个答案,我会很乐意赞成它。

相关内容