如何在DigitalOcean上安全地与Kryptonite进行SSH连接

SSH是连接到远程Linux服务器的主要方式。保护此渠道对于维护安全的基础设施至关重要。 Kryptonite是保护您的SSH私钥的安全解决方案。在本指南中,您将在手机上与Kryptonite生成一个SSH密钥对,将手机与本地计算机配对,并使用Kryptonite将SSH加入到DigitalOcean Droplet中。

介绍

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私钥的新解决方案。 它是免费的,易于设置,用户友好,并具有额外的内置安全保护。 它不需要服务器端更改,并允许您通过推送通知您的手机(不打开应用程序)来批准登录请求。 无论使用哪个机器或服务器,您都可以在手机上随时随地使用已知的主机。

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

先决条件

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

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

第1步 - 生成Kryptonite密钥对

第一步是通过在iOS或Android手机上访问get.krypt.co来下载Kryptonite应用程序。

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

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

第2步 - 安装kr

下一步继续在您的本地计算机上。 您需要安装kr命令行实用程序 ,该实用程序使SSH能够使用存储在Kryptonite中的密钥进行身份验证。 您可以安装kr与您首选的软件包管理器(如npmbrew )或者简单地使用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码。 如果您的终端窗口很小,您可能需要使其更大,以便整个QR码可见或使字体大小更小。

在Kryptonite应用程序中,点击屏幕底部的允许相机访问 相机出现后,请扫描终端中的QR码。 几秒钟后,Kryptonite应用程序将显示成功的配对,终端将打印出您的Kryptonite SSH公钥。

我们来测试一下这个钥匙对的工作原理。

第4步 - 使用Kryptonite测试SSH

要检查一切正常,尝试SSHing进入公众me.krypt.co服务器:

ssh me.krypt.co

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

  • 允许一次只允许这一个请求登录me.krypt.co
  • 允许1小时批准此请求以及来自配对计算机的下一个小时的其他SSH登录请求。 当这些登录发生时,您仍然会收到通知,但会自动获得批准。
  • 拒绝丢弃此请求,SSH登录在计算机上失败(或退回到本地密钥)。

点击允许一次 您将看到一个成功的SSH登录到me.krypt.co ,这将很快退出伪shell并显示屏蔽徽标。

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

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

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

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

kr digitalocean

您将看到输出与DigitalOcean特定的说明,如下所示:

Public 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. 单击保存

您可以在DigitalOcean教程的第3步中找到有关在此第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源代码