我们使用硬件密钥注册了紧急访问SSH主机的过程





在本文中,我们将开发一个使用脱机安全密钥紧急访问SSH主机的过程。这只是一种方法,您可以自行调整。我们会将主机的SSH CA存储在硬件安全密钥上。该方案几乎可用于所有OpenSSH,包括具有单点登录的SSH。



为什么要这样?好吧,这是不得已的选择。这是一个后门,如果出于某种原因没有其他帮助,则允许您访问服务器。



为什么要使用证书代替公钥/私钥进行紧急访问?



  • , . , 1 5 . . .
  • ​​ «» .




  • , .

    — , . - PIN-. , — . , , , USB- Yubikey 5. , . , .
  • .
  • 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-9-512-742@smallstep.com,这样我就不会忘记此CA属于哪个安全密钥。



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



  1. sk-user-ca,密钥描述符,它引用存储在安全密钥中的私钥,
  2. sk-user-ca.pub,它将是您的CA的公钥。


但请放心,Yubikey还有另一个无法检索的私钥。因此,这里的一切都是可靠的。



在作为根用户的主机上,将以下内容(如果尚未添加)添加到您的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: ecdsa-sha2-nistp256-cert-v01@openssh.com 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


这里的公钥是我们创建的紧急密钥,并且CA与sk-user-ca关联。



我们终于可以运行SSH命令了:




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


  1. 现在,您可以为信任您的CA的主机上的任何用户创建证书。
  2. 您可以删除紧急情况。您可以保留sk-user-ca,但因为安全密钥上也有此内容,所以您不需要它。如果将其用于紧急访问,则可能还需要从主机中删除原始PEM公钥(例如,在ubuntu用户的〜/ .ssh / authorized_keys中)。


紧急通道:行动计划



插入安全密钥并运行命令:



$ ssh-add -K


这会将CA的公钥和密钥描述符添加到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以不使用它。如果您需要将证书发送给同事,最简单,最安全的选择是Magic Wormhole这仅需要两个文件-在我们的示例中,这些文件是Emergency和Emergency-cert.pub。



我喜欢这种方法的是硬件支持。您可以将安全密钥放在保险柜中,它们将不会随处可见。






广告



Epic服务器廉价的VPS,具有AMD的强大处理器,CPU核心频率高达3.4 GHz。最高配置使您几乎可以解决所有问题-128个CPU内核,512 GB RAM,4000 GB NVMe。加入我们!






All Articles