我们规定了使用硬件密钥紧急访问 SSH 主机的程序

我们规定了使用硬件密钥紧急访问 SSH 主机的程序

在这篇文章中,我们将开发一个使用硬件安全密钥离线紧急访问 SSH 主机的程序。 这只是一种方法,您可以根据自己的需要进行调整。 我们将把主机的 SSH 证书颁发机构存储在硬件安全密钥上。 该方案几乎适用于任何 OpenSSH,包括单点登录的 SSH。

这一切到底是为了什么? 嗯,这是最后的选择。 这是一个后门,当由于某种原因其他方法不起作用时,它可以让您访问您的服务器。

为什么使用证书而不是公钥/私钥进行紧急访问?

  • 与公钥不同,证书的生命周期非常短。 您可以生成有效期为 1 分钟甚至 5 秒的证书。 在此期限之后,证书将无法用于新连接。 这是紧急访问的理想选择。
  • 您可以为主机上的任何帐户创建证书,并在必要时将此类“一次性”证书发送给同事。

你需要什么

  • 支持驻留密钥的硬件安全密钥。
    驻留密钥是完全存储在安全密钥内的加密密钥。 有时它们受到字母数字 PIN 的保护。 驻留密钥的公共部分可以从安全密钥中导出,也可以选择与私钥句柄一起导出。 例如,Yubikey 5系列USB密钥支持常驻密钥,建议仅用于紧急访问主机。 在这篇文章中,我将只使用一把钥匙,但您应该有一个额外的钥匙用于备份。
  • 存放这些钥匙的安全地方。
  • 您的本地计算机以及您想要紧急访问的服务器上的 OpenSSH 版本 8.2 或更高版本。 Ubuntu 20.04 附带 OpenSSH 8.2。
  • (可选,但推荐)用于检查证书的 CLI 工具。

训练

首先,您需要创建一个位于硬件安全密钥上的证书颁发机构。 插入密钥并运行:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

作为评论(-C)我指出 [电子邮件保护]这样您就不会忘记该证书颁发机构属于哪个安全密钥。

除了将密钥添加到 Yubikey 之外,还会在本地生成两个文件:

  1. sk-user-ca,密钥句柄,指存储在安全密钥中的私钥,
  2. sk-user-ca.pub,这将是您的证书颁发机构的公钥。

但不用担心,Yubikey 存储了另一个无法检索的私钥。 因此,这里的一切都是可靠的。

在主机上,以 root 身份将以下内容添加(如果尚未)到 SSHD 配置 (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

然后在主机上,将公钥(sk-user-ca.pub)添加到/etc/ssh/ca.pub

重新启动守护进程:

# /etc/init.d/ssh restart

现在我们可以尝试访问主机了。 但首先我们需要一个证书。 创建将与证书关联的密钥对:

$ ssh-keygen -t ecdsa -f emergency

证书和 SSH 对
有时,人们很想使用证书来替代公钥/私钥对。 但仅凭证书不足以对用户进行身份验证。 每个证书还有一个与其关联的私钥。 这就是为什么我们需要在为自己颁发证书之前生成这个“紧急”密钥对。 重要的是我们向服务器显示签名的证书,表明我们拥有私钥的密钥对。

所以公钥交换仍然存在并且运行良好。 即使有证书,这也适用。 证书只是消除了服务器存储公钥的需要。

接下来,创建证书本身。 我需要以 10 分钟为间隔进行 ubuntu 用户授权。 你可以按照你的方式去做。

$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency

系统会要求您使用指纹签署证书。 您可以添加以逗号分隔的其他用户名,例如 -n ubuntu,carl,ec2-user

就是这样,现在您已经获得了证书! 接下来您需要指定正确的权限:

$ chmod 600 emergency-cert.pub

之后,您可以查看您的证书的内容:

$ step ssh inspect emergency-cert.pub

这就是我的样子:

emergency-cert.pub
        Type: [email protected] user certificate
        Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Key ID: "test-key"
        Serial: 0
        Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
        Principals:
                ubuntu
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

这里的公钥就是我们创建的应急密钥,sk-user-ca与证书颁发机构关联。

最后我们准备运行 SSH 命令:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. 您现在可以为信任您的证书颁发机构的主机上的任何用户创建证书。
  2. 您可以删除紧急情况。 您可以保存 sk-user-ca,但不需要这样做,因为它也在安全密钥上。 如果您将原始 PEM 公钥用于紧急访问,您可能还需要从主机中删除它(例如 ubuntu 用户的 ~/.ssh/authorized_keys 中)。

紧急通道:行动计划

粘贴安全密钥并运行命令:

$ ssh-add -K

这会将证书颁发机构的公钥和密钥描述符添加到 SSH 代理。

现在导出公钥来制作证书:

$ ssh-add -L | tail -1 > sk-user-ca.pub

创建一个到期日期不超过一小时的证书:

$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub

现在再次使用 SSH:

$ ssh -i emergency username@host

如果您的 .ssh/config 文件在连接时引起一些问题,您可以使用 -F none 选项运行 ssh 来绕过它。 如果您需要向同事发送证书,最简单、最安全的选择是 魔法虫洞。 为此,您只需要两个文件 - 在我们的例子中是 Emergency 和 Emergency-cert.pub。

我喜欢这种方法的是硬件支持。 您可以将安全钥匙放在保险箱中,它们不会去任何地方。

由于宣传

史诗级服务器 - 便宜的VPS 配备强大的AMD处理器,CPU核心频率高达3.4 GHz。 最高配置可让您解决几乎任何问题 - 128 个 CPU 核心、512 GB RAM、4000 GB NVMe。 加入我们!

我们规定了使用硬件密钥紧急访问 SSH 主机的程序

来源: habr.com

添加评论