对于 openssh 证书签名的主机密钥,“没有匹配的证书私钥”是什么意思?

对于 openssh 证书签名的主机密钥,“没有匹配的证书私钥”是什么意思?

我正在尝试设置 OpenSSH 主机证书,以减少在我的站点上主机进出时管理 ssh_known_hosts 的工作量。我创建了一个 SSH 密钥对作为 CA 密钥。然后我设置 Ansible 使用 openssh_cert 模块向 CA 签署主机密钥,将 HostCertificate /path/to/signed_host_key 添加到 sshd_config,然后重新加载 sshd。

但是,我将证书密钥添加到 ssh_known_hosts 后,仍然会提示我确认主机的真实性。当我登录主机并检查日志时,我看到了以下错误消息:

error: No matching private key for certificate

在证书签名密钥的上下文中,该错误消息是什么意思?签名只会创建一个证书签名的公钥,而且我知道我不应该将 CA 私钥上传到主机。

我搜索了该错误消息,并得到了一堆关于创建密钥或创建 SSH 证书的一般讨论,或者如果我用引号搜索,则得到了 openssh 源代码的列表。

答案1

在证书签名的主机密钥上下文中,该错误消息意味着签名的主机密钥与相应的主机密钥不匹配。例如,如果您生成签名的主机密钥,然后完全重新创建主机(创建新的主机密钥),但仍尝试使用针对旧版本主机创建的签名主机密钥。

截至撰写本文时,Ansible openssh_cert 模块没有注意到如果签名密钥或主机密钥已更改。这意味着如果您签名主机密钥,然后主机密钥发生更改,openssh_cert 将不是注意。您必须force: yes让它根据更新的主机密钥重新生成签名的主机密钥。

(自我回答,以便其他人更容易找到这一点。我最终注意到主机密钥文件比签名的主机密钥文件更新,并发现当主机密钥更改时 openssh_cert 没有重新生成签名的主机密钥。)

相关内容