如何在 DigitalOcean 上使用氪石安全 SSH

介绍

SSH是连接到远程 Linux 服务器的主要途径。保护此渠道对于维护安全基础设施至关重要。通过 SSH 对远程服务器进行身份验证的最常见方式是使用公共/私钥对。

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

通常情况下,开发人员会将他们的私钥存储在~/.ssh目录中,但是,您可以使用简单的cat ~/.ssh/id_rsa命令读取您的私钥。

对这种安全风险的常见解决方案是添加第二个因素(即允许(多因素身份验证或MFA)(https://andsky.com/tech/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-16-04))。 这种解决方案的缺点是两种:设置成本和可用性. 对于您创建的每个服务器,您必须配置OpenSSH服务器以使用OATH-TOTP PAM模块,并将共享秘密加载到它上。 这是一个耗时的过程,有很多地方可以犯错误。 此外,每次您将SSH应用到您的服务器中,您必须在手机上打开一个应用程序,阅读六位数的PAM代码,然后输入到您的终端。

为了避免配置MFA的缺点,开发人员经常使用USB硬件安全模块(HSM),如NitroKey或YubiKey,以生成和存储SSH公私密钥对。

但是HSM是昂贵的;SSH兼容设备成本高达50美元. 这是另一个设备可以携带,每次你将SSH插入服务器,你必须将USB设备插入您的计算机并按下一个物理按钮。

Kryptonite是保护您的SSH私钥的新解决方案. 它是免费的,易于设置,用户友好,并具有额外的内置安全保护。 它不需要服务器侧的更改,并允许您通过向手机推送通知批准登录请求(不打开应用程序)。

在本指南中,您将用 Kryptonite 在手机上生成一个 SSH 密钥对,将您的手机与本地计算机对并,并使用 Kryptonite 将 SSH 变成一个 DigitalOcean Droplet。

前提条件

要遵循这个指南,你将需要:

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

步骤 1 – 生成一个 Kryptonite 密钥对

第一步是下载 Kryptonite 应用程序,在您的 iOS 或 Android 手机上访问 get.krypt.co

一旦安装了该应用程序,请打开它并点击生成密钥对以创建您的 Kryptonite SSH 密钥对。

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

步骤 2 – 安装kr

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

出于安全原因,如果您想在安装之前检查安装脚本,您可以运行‘curl https://krypt.co/kr > install_kr’并查看它。

当你准备好时,安装kr

1[environment local]
2curl https://krypt.co/kr | sh

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

现在你有应用程序,一个密钥对和kr,下一步是将你的计算机与 Kryptonite 配对。

步骤 3 – 将 Kryptonite 与您的计算机配对

kr成功安装后,运行:

1[environment local]
2kr pair

如果您的终端窗口小,您可能需要使其更大,以使整个QR代码可见或使字体大小更小。

在 Kryptonite 应用程序中,点击屏幕底部的 ** 允许摄像头访问 ** 一旦摄像头出现,请扫描终端中的 QR 代码. 几秒后, Kryptonite 应用程序将显示成功的配对,终端将打印您的 Kryptonite SSH 公共密钥。

让我们来测试这个关键对是否有效。

步骤 4 – 使用 Kryptonite 测试 SSH

要检查一切是否奏效,请尝试 SSHing 进入公用me.krypt.co服务器:

1[environment local]
2ssh me.krypt.co

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


你会看到一个成功的SSH登录到me.krypt.co,它将迅速离开伪壳并显示盾牌标志。

如果你锁定你的设备,并尝试 SSH 到 me.krypt.co 再次,它将发送一个推送通知到你的设备与预期的命令,请求你的批准从锁屏。

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

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

若要将您的公共密钥添加到 DigitalOcean,请执行以下命令:

1[environment local]
2kr digitalocean

您将看到输出与DigitalOcean特定的指令,如下:

1[secondary_label Output]
2Public key copied to clipboard.
3Press ENTER to open your web browser to DigitalOcean.
4Then click “Add SSH Key” and paste your public key.

这是你需要做的下一步:

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

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

将你的密钥上传到DigitalOcean很容易将其添加到一个新的Droplet。当你创建服务器时,只需选择你的Kryptonite密钥的框。

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

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

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

1[environment local]
2kr add user@your_server_ip

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

1[environment local]
2ssh user@your_server_ip

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

结论

现在你已经设置了 Kryptonite 并成功将你的 Kryptonite 公共密钥添加到你的 DigitalOcean 帐户中,你现在可以从任何配对的计算机中 SSH 到任何你的 Droplets。

您的私钥安全地存储在您的手机上,永远不会离开您的设备. 当您允许请求时,私钥用于在您的设备上本地加密签署 SSH 登录协议。

有关 Kryptonite 如何工作的更多信息,请参阅 Kryptonite 的系统架构博客文章Kryptonite 和 kr 源代码

Published At
Categories with 技术
comments powered by Disqus