Я пытаюсь настроить сертификаты хоста OpenSSH, чтобы сократить усилия по управлению ssh_known_hosts, когда хосты приходят и уходят на моем сайте. Я создал пару ключей SSH, которая будет служить ключом CA. Затем я настроил Ansible для подписи ключа хоста с CA с помощью модуля openssh_cert, добавил HostCertificate / path / to / signed_host_key в sshd_config и перезагрузил sshd.
Однако после того, как я добавил ключ сертификата в ssh_known_hosts, мне по-прежнему предлагается подтвердить подлинность хоста. Когда я вхожу на хост и проверяю журнал, я вижу это сообщение об ошибке:
error: No matching private key for certificate
Что означает это сообщение об ошибке в контексте ключей, подписанных сертификатом? При подписании создается только открытый ключ, подписанный сертификатом, и я знаю, что не должен загружать закрытый ключ CA на хост.
Я искал это сообщение об ошибке и получил кучу общих дискуссий о создании ключей или создании сертификатов SSH или списках исходного кода openssh, если я искал его с кавычками.
В контексте ключей хоста, подписанных сертификатом, это сообщение об ошибке означает, что подписанный ключ хоста не соответствует соответствующему ключу хоста. Например, если вы генерируете подписанный ключ хоста, затем полностью воссоздаете хост (создавая новый ключ хоста), но все же пытаетесь использовать подписанный ключ хоста, созданный для старой версии хоста.
На момент написания этой статьи модуль Ansible openssh_cert не замечает если ключ подписи или ключ хоста изменились. Это означает, что если вы подписываете ключ хоста, а затем ключ хоста изменяется, openssh_cert будет не уведомление. Ты должен force: yes
чтобы он регенерировал подписанный ключ хоста по обновленному ключу хоста.
(Самоответчик, чтобы другим было легче это найти. В конце концов я заметил, что файлы ключей хоста новее, чем подписанные файлы ключей хоста, и выяснил, что openssh_cert не восстанавливает подписанный ключ хоста при изменении ключа хоста.)