1

Когда я перехожу с моего Mac на новый удаленный сервер Ubuntu, он просит подтвердить отпечаток ключа как BLA-объект SHA256 base64.

Но когда я пытаюсь подключиться с помощью Putty в Windows или Ubuntu к новому удаленному серверу Ubuntu, мне предлагается подтвердить отпечаток ключа как MD5. Я бы предпочел подтвердить использование BLA-объекта SHA256 base64.

Документация по Putty для панели конфигурации Key Exchange указывает, что она знает о больших двоичных объектах base64, но это ссылка на параметр, который предполагает, что я заранее знаю отпечатки пальцев (ручная настройка).

Могу ли я / как сказать Putty отображать новый отпечаток ключа удаленного базового объекта base64 вместо нового удаленного отпечатка ключа MD5 при подключении к удаленному серверу, и этот удаленный отпечаток не соответствует локально сохраненному предыдущему значению?

1 ответ1

2

Будьте осторожны, чтобы различать 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.

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