3

У меня были проблемы с развертыванием моего CI-сервера в последнее время из-за того, что клиент (CI) отклонил ключ хоста удаленного компьютера (несмотря на то, что он присутствовал в known_hosts). До сегодняшнего дня я был в тупике, когда понял, что SSH сохраняет ключи хоста в формате, с которым плагин развертывания не совместим. Для справки, совместимый формат (все еще присутствует на моем персональном компьютере) выглядит следующим образом:

11.22.33.44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkVf7rhfC7nLxbeIQRj2bWitUC+XLSAeQ0ap8r8rKObDXYfPdB97NZth9JCEt3OrBXuBeg4PaAEuPu2QF7WXoT60hgAP6etr0W4LqcH59yd/X0ogFP7Y7hIf6dz1txDKaW92wgUi5XShwH6vukf0gLvW6/ak1LTBuoy72gaoUvxZge4KZivz9XqvSQHNOG9KYNfh8U6cRM8YTQo5in7YD5d6REV/FUmXpvBzCa9kbVRSlQFGYEc1HidTnPnJDteas3A9y3na385O7WN64aAkg7TO8IFXKdDHSwji9ZyrCVPA5GEuyLKhDFanV8iJ7CNflHMP8TwG5FOT2bSkV0lPyl

Хотя формат SSH в настоящее время сохраняется при принятии новых ключей хоста, он выглядит примерно так:

11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=

(Примечание: хотя я немного выдумал открытые ключи, они по-прежнему совсем не похожи друг на друга в своей первоначальной форме.)

Только первый формат совместим с плагином развертывания, а второй безоговорочно игнорируется. Кто-нибудь может объяснить это несоответствие?

1 ответ1

7

Это не разные форматы known_hosts , а разные типы ключей (ssh-rsa и ecdsa-sha2-nistp256 - хорошо описано на странице руководства для sshd). Сервер обычно имеет больше ключей хоста разных типов, чтобы обеспечить более широкую совместимость с разными клиентами.

Если вы находитесь на сервере, вы можете найти все ключи хоста и распечатать их открытые ключи, используя, но строка не в том же формате, что и:

$ cat /etc/ssh/ssh_host_*.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU= user@host

Формат, который принимается файлом known_hosts может быть получен с использованием (с сервера для достижения подлинности ключей):

$ ssh-keyscan 11.22.33.44
11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=
#[...]

Это печатает формат, который вы можете непосредственно сохранить в клиенте known_hosts .

Для всей картины (со страницы руководства):

Каждая строка в этих файлах содержит следующие поля: маркеры (необязательно), имена хостов, биты, экспонента, модуль, комментарий. Поля разделены пробелами.

(хотя это выглядит несовместимым с тем, что генерируется: имя хоста, тип ключа, данные ключа (base64)) - я проверю это позже, так как это не важно для вопроса

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .