如何在DigitalOcean上使用Kryptonite安全地进行SSH

来自菜鸟教程
跳转至:导航、​搜索

介绍

SSH 是连接远程 Linux 服务器的主要方式。 保护此通道对于维护安全的基础架构至关重要。 通过 SSH 对远程服务器进行身份验证的最常见方法是使用公钥/私钥对。 将公钥添加到远程服务器上的授权密钥列表中,您就可以开始了。

更困难的问题是如何安全地存储您的私钥。

通常,开发人员将他们的私钥存储在 ~/.ssh 目录中。 但是,您可以使用简单的 cat ~/.ssh/id_rsa 命令读取您的私钥。 你机器上的任何应用程序都可能读取你的 SSH 私钥,即使它是用密码加密的。

这种安全风险的一个常见解决方案是添加第二个因素(即 启用 多因素身份验证,或 MFA)。 这样做的缺点是双重的:设置成本和可用性。 对于您创建的每个服务器,您必须配置 OpenSSH 服务器以使用 OATH-TOTP PAM 模块并将共享密钥加载到它上面。 这是一个耗时的过程,而且有很多地方会出错。 此外,每次通过 SSH 连接到服务器时,您都必须在手机上打开一个应用程序,读取一个六位数代码,然后将其输入您的终端。 这会显着减慢您的工作流程。

为了避免配置 MFA 的缺点,开发人员经常使用 USB 硬件安全模块 (HSM),如 NitroKey 或 YubiKey,来生成和存储 SSH 公私密钥对。 这些是保存 SSH 密钥对的小型 USB 设备。 每次您想通过 SSH 连接到服务器时,您都需要将 USB 设备插入计算机并按下设备上的按钮。

但是 HSM 很贵。 SSH 兼容设备的价格高达 50 美元。 它是另一种随身携带的设备,每次通过 SSH 连接到服务器时,都必须将 USB 设备插入计算机并按下其上的物理按钮。 USB HSM 通常也没有任何显示屏,因此您不知道您实际批准了哪个登录,也无法查看您已通过身份验证的审核日志。

Kryptonite 是一种保护您的 SSH 私钥的新解决方案。 它是免费的、易于设置、用户友好的,并且具有额外的内置安全保护。 它不需要服务器端更改,并允许您通过向手机推送通知来批准登录请求(无需打开应用程序)。 无论您通过 SSH 连接到或来自哪台机器或服务器,已知主机始终在您的手机上。

在本指南中,您将在手机上使用 Kryptonite 生成 SSH 密钥对,将手机与本地计算机配对,然后使用 Kryptonite SSH 进入 DigitalOcean Droplet。

先决条件

要遵循本指南,您将需要:

  • 一个运行任何 Linux 发行版的 DigitalOcean Droplet。
  • 智能手机:iPhone(iOS 9.1 或更高版本)或 Android(6.0 或更高版本)。
  • 运行 macOS(10.10 或更高版本)、Ubuntu、Debian、RHEL、CentOS、Fedora 或 Kali Linux 的个人计算机。

第 1 步 — 生成氪石密钥对

第一步是在 iOS 或 Android 手机上前往 get.krypt.co 下载 Kryptonite 应用程序。

安装应用程序后,打开它并点击 Generate Key Pair 以创建您的 Kryptonite SSH 密钥对。 如果您想用它来识别您的公钥,请输入电子邮件(或跳过此步骤)。

接下来,您需要安装 Kryptonite 的命令行实用程序。

第 2 步 — 安装 kr

下一步在您的本地计算机上继续。 您需要安装 kr 命令行实用程序 ,它使 SSH 能够使用存储在 Kryptonite 中的密钥进行身份验证。 您可以使用您喜欢的包管理器(如 npm brew)安装 kr 或简单地使用 curl,就像我们将在这里做的那样。

为了安全起见,如果你想在安装前检查安装脚本,你可以运行curl https://krypt.co/kr > install_kr看看。 您可以在 kr 文档 中阅读更多关于它的工作原理和替代安装方式的信息。

准备好后,安装 kr

curl https://krypt.co/kr | sh

您将被要求启用推送通知。 这是 Kryptonite 通过推送通知发送登录批准请求所必需的。

现在您已经有了应用程序、密钥对和 kr,下一步是将您的计算机与 Kryptonite 配对。

第 3 步 — 将 Kryptonite 与您的计算机配对

kr安装成功后,运行:

kr pair

二维码将出现在终端中。 如果您的终端窗口很小,您可能需要将其放大以使整个 QR 码可见或缩小字体大小。

在 Kryptonite 应用程序中,点击屏幕底部的 Allow Camera Access。 出现摄像头后,扫描终端中的二维码。 几秒钟后,Kryptonite 应用程序将显示配对成功,终端将打印出您的 Kryptonite SSH 公钥。

让我们测试一下这个密钥对是否有效。

第 4 步 — 使用 Kryptonite 测试 SSH

要检查一切是否正常,请尝试通过 SSH 连接到公共 me.krypt.co 服务器:

ssh me.krypt.co

您会注意到 Kryptonite 应用程序上出现了一个请求,要求您通过三个选项批准 SSH 身份验证:

  • Allow Once只批准这一次登录me.krypt.co的请求。
  • 允许 1 小时 批准此请求以及下一小时来自配对计算机的所有其他 SSH 登录请求。 当这些登录发生时,您仍会收到通知,但它们将被自动批准。
  • Reject 丢弃此请求,并且 SSH 登录在您的计算机上失败(或回退到本地密钥)。

点击 允许一次 。 您将看到成功通过 SSH 登录到 me.krypt.co,这将快速退出伪 shell 并显示盾牌徽标。

如果您锁定您的设备并再次尝试通过 SSH 连接到 me.krypt.co,它将使用预期的命令向您的设备发送推送通知,请求您从锁定屏幕获得批准。

第 5 步 — 将您的 Kryptonite Pubkey 添加到 DigitalOcean

现在 Kryptonite 已与您的计算机配对,您可以快速将您的公钥添加到您通过 SSH 使用的所有服务器和工具。

要将您的公钥添加到 DigitalOcean,请运行以下命令:

kr digitalocean

您将看到带有特定于 DigitalOcean 的指令的输出,如下所示:

OutputPublic key copied to clipboard.
Press ENTER to open your web browser to DigitalOcean.
Then click “Add SSH Key” and paste your public key.

这是您接下来需要做的:

  1. 从您的终端按 ENTER 以自动导航到您的 DigitalOcean 设置页面,如有必要,请登录。
  2. 单击添加SSH密钥
  3. 粘贴您的 Kryptonite 公钥。
  4. 单击保存

您可以在此 SSH on DigitalOcean 教程 第 3 步中找到有关添加 SSH 密钥的详细说明。

将您的密钥上传到 DigitalOcean 可以轻松地将其添加到新的 Droplet。 只需在创建服务器时选择您的 Kryptonite 密钥框。 接下来,让我们将此密钥添加到现有的 Droplet。

第 6 步 — 将您的 Kryptonite Pubkey 添加到现有的 Droplet

kr 命令行工具可用于将您的 Kryptonite 公钥添加到您可以使用本地 SSH 密钥或密码访问的已经运行的 Droplet。

运行以下命令将您的 Kryptonite 公钥添加到 Droplet 的授权用户文件中,确保替换为您的用户名和您的 Droplet 的 IP 地址。

kr add user@your_server_ip

完成此操作后,通过尝试 SSH 来测试它是否有效。

ssh user@your_server_ip

您将在手机上收到 Kryptonite SSH 登录请求。

结论

现在您已经设置了 Kryptonite 并成功地将您的 Kryptonite 公钥添加到您的 DigitalOcean 帐户,您现在可以从任何配对的计算机通过 SSH 连接到您的任何 Droplet。

您的私钥安全地存储在您的手机上,永远不会离开您的设备。 当您允许请求时,私钥用于在您的设备上本地对 SSH 登录随机数进行加密签名。 然后将该签名发送回您的计算机以完成 SSH 身份验证。

有关 Kryptonite 工作原理的更多信息,请查看 Kryptonite 的系统架构博文Kryptonite 和 kr 源代码