为一个身份文件指定多个 SSH 签名证书

6 ssh ssh-keys

我希望为 SSH 身份验证实现签名证书。我已经按照这里的步骤操作,现在正在尝试弄清楚我将如何在我的系统上实现它。

例如,我们有两个环境:生产和测试;每个人都有自己的“用户密钥”来签署其他密钥。我希望能够控制谁可以访问每个环境,但我遇到的不便是允许一个用户使用相同的私钥访问两个环境。

从'-i identity_file'下'ssh'的手册页:

ssh 还将尝试从通过将 -cert.pub 附加到身份文件名获得的文件名中加载证书信息

这似乎意味着除了添加 .ssh/config 文件条目以使其使用正确的证书之外,我还必须拥有私钥的多个副本(只是名称不同)并相应地命名证书文件。

我的理解是,如果您在 .ssh/config 中指定多个 IdentityFile 条目,ssh 将尝试每个条目。但是,似乎没有选项(至少我在文档中找不到)来指定证书。

有没有办法在 .ssh/config 或包含要检查的证书列表的文件中指定证书文件(假定的 -cert.pub 除外)?

小智 1

我不知道执行此操作的方法,但我知道两种方法。

  1. ssh-agent 似乎非常乐意为单个身份存储多个证书。例如,如果您id_ed25519的 id 为id_ed25519-cert1.pubid_ed25519-cert2.pub,则可以执行以下操作:

    cp id_ed25519-cert1.pub id_ed25519-cert.pub
    ssh-add id_ed25519
    cp id_ed25519-cert2.pub id_ed25519-cert.pub
    ssh-add id_ed25519
    
    Run Code Online (Sandbox Code Playgroud)

    现在这两个证书都可以与身份一起使用。再说一次,这不是一个好的解决方案。

  2. 为指向同一身份的其他身份创建符号链接,并为每个身份提供自己的证书。或者直接复制它们。再说一遍,丑陋,但应该有用。

  3. 您可能想将多个证书(因为它们每一行)放在一个 -cert.pub 文件中。在我的系统上,这只识别第一行。

  4. 为了获得额外的乐趣,请注意,使用证书签署身份将覆盖现有证书,而无需确认。

在我看来,这里的根本问题是,适用于主机 CA 的同一模型不适用于授权用户。签署主机密钥(假设您指定主体)是一种身份验证声明- 它仅表明通过此签名您知道服务器的主机密钥可以合法地识别它。

对用户密钥进行签名同样可以传达身份验证,但这里还有一个额外的授权问题——CA 的签名表明该密钥合法地标识了用户,并且应该允许用户登录到计算机。

主机密钥和用户密钥并不是真正的双重密钥,因为启动与服务器的握手与登录不可比(即使您的能力受到限制),并且不能这样对待。