Отличающиеся форматы SSH known_hosts

9216
caseif

У меня были проблемы с развертыванием моего 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=

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

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

3

1 ответ на вопрос

6
Jakuje

These are not different formats of known_hosts, but different key types (ssh-rsa and ecdsa-sha2-nistp256 - well described in manual page for sshd). Server usually have more host keys of different types to provide wider compatibility with different clients.

If you are on the server, you can find all the host keys and print their public keys using, but the line is not in the same format as :

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

The format that is accepted by known_hosts file can be obtained using (from the server to achieve the authenticity of the keys):

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

This prints the format you can directly store in the client known_hosts.

For the whole picture (from manual page):

Each line in these files contains the following fields: markers (optional), hostnames, bits, exponent, modulus, comment. The fields are separated by spaces.

(though it looks non-consistent with what is generated: hostname, key-type, key data (base64)) - I will check that later, since it is not important for the question

Формат, к которому я привык, это: IP-адрес, пробел, тип ключа, пробел, четырехбуквенный As и некоторые другие вещи (которые часто начинаются аналогично, но в конечном итоге содержат необработанные данные ключа и отличаются). Так что оба ваших примера следуют одному и тому же формату. С ecdsa-sha2-nistp256 я замечаю еще одну AAAA, и более поздняя AAABBB кажется обычной. Ваше решение: заставить плагин обновляться для поддержки нового типа ключа. (Вы хотите, чтобы ваш плагин регулярно обновлялся, иначе это может быть постоянной проблемой, так как новые типы ключей становятся распространенными.) TOOGAM 8 лет назад 0
@TOOGAM Нет, первый имеет префикс IP-адреса. Ключевые данные должны быть одинаковыми, если вы хотите, чтобы они работали (и зачем кодировать одни и те же данные двумя разными способами?). Jakuje 8 лет назад 0

Похожие вопросы