Будьте осторожны, чтобы различать BLOB-объекты и хэши. Ключ блоб общественности используется OpenSSH, а также замазки, то же самое для данного ключа , независимо от хэша (ов) , используемого. Ключевой блоб хранится в base64 OpenSSH в его xxx_key.pub known_hosts authorized_keys
в зависимости от обстоятельств, отчасти потому, что он упрощает копирование этих файлов и значений с помощью таких методов, как вырезание и вставка и (особенно старая) электронная почта, которые могут не обрабатываться «бинарные» или «8-битные» данные. «Отпечаток пальца», отображаемый OpenSSH (по умолчанию, если вы не запрашиваете VisualHostKey
), когда-то был MD5 (BLOB- объект ), отображаемый в шестнадцатеричном формате , а теперь SHA256 (BLOB-объект) отображается в Base64. PuTTY следовал первоначальному примеру OpenSSH, но (по состоянию на 0.67) не обновлялся.
Вы можете запросить усовершенствование, следуя инструкциям в руководстве и продублировав его на http://www.chiark.greenend.org.uk/~sgtatham/putty/feedback.html#feedback-features . Или это с открытым исходным кодом; Вы можете внести изменения самостоятельно и отправить их обратно (см. B.5 сразу после B.4). Код «отпечатка пальца» в настоящее время находится в одном месте в sshdsa.c
а два - в sshrsa.c
, но я вижу на веб-сайте следующий выпуск, который будет содержать ключи ecdsa и ed25519, что, по-видимому, означает по крайней мере одно и, возможно, несколько новых мест ) создать отпечаток пальца. Чтобы быть последовательными, можно использовать base64 хэша (а не только большого двоичного объекта, как сейчас) в validate_manual_key
в misc.c
Это легко, если вы безоговорочно переходите на SHA256-b64 и никогда не используете MD5-hex; для представления или функции, используемой другими людьми, это, вероятно, должно быть настраиваемым и / или интерактивным, что выглядит немного сложнее.
Для Windows я вижу один очень неуклюжий обходной путь. Используйте plink
чтобы подключиться к хосту и принять новый ключ, поместив его в реестр. (Если был старый ключ, сначала сохраните его.) Получить новый ключ из реестра (по частям), собрать BLOB-объект, хэш и base64 его и отобразить для подтверждения. Если не подтверждено, удалите ключ из реестра (и восстановите любой предыдущий).
Для Unix чуть менее неуклюжий способ - использовать ssh
с StrictHostKeyChecking=no
чтобы принять новый ключ и поместить BLOB- объект base64 в known_hosts
, или использовать ssh-keyscan
для непосредственного получения BLOB- объекта Base64 . Затем base64-декодирование, хеш, base64-кодирование (хэш) и отображение; если плохой после принудительного принятия ssh
, удалите плохую запись из known_hosts
; если хорошо после ssh-keyscan
, добавьте хорошую запись. OpenSSL может удобно выполнять оба бита вычисления:
awk <.ssh/known_hosts '$1~/thehostname/{print $3}' |openssl base64 -d |openssl sha256 |openssl base64
но если у вас нет OpenSSL, должно быть легко объединить другие инструменты base64 и sha256.