Получение SHA1-дайджеста открытого ключа SSH

Кажется, это должно быть легко. Я запускаю "ssh-keygen -l -f " (по умолчанию кажется SHA1). Все примеры демонстрируют печать дайджеста в шестнадцатеричном формате с небольшой дополнительной безвредной информацией. Тем не менее, на моем Mac я получаю бесполезную непрозрачную строку.

Следует отметить, что параметр "-E" работает на Mac (10.10), но недоступен в Ubuntu (14.04). Имейте это в виду, если это не работает для вас.

$ ssh-keygen -l -E md5 -f dustin.pem
2048 MD5:29:ed:da:d3:5a:8c:78:4f:62:d3:fd:0c:77:5b:6d:d9 dustin.pem.pub (RSA)

$ ssh-keygen -l -E sha1 -f dustin.pem
2048 SHA1:x2ENPL+vzVdlgkIyu0tAhVQ+H4U dustin.pem.pub (RSA)

$ ssh-keygen -l -E sha256 -f dustin.pem
2048 SHA256:agJs/axI8QPzet/eoPMDxLSf37fd1bgsMX4Di0gqMy4 dustin.pem.pub (RSA)

Оба алгоритма SHA возвращают непрозрачные, но разные строки ASCII.

Что мне не хватает? Как получить шестнадцатеричный дайджест SHA1 без необходимости копировать мой ключ в систему Linux, чтобы это сделать?

Благодарю.

2 ответа

Традиционно OpenSSH отображал (открытый) отпечатки клавиш ключа, используя MD5 в шестнадцатеричном виде или, необязательно, как "ASCII art" или "bubblebabble" (серия бессмысленных, но произносимых 5-буквенных квазислов); 6.8 в марте 2015 г. добавлены опции для SHA1 и SHA256 в (PEMstyle) base64, причем последнее теперь является значением по умолчанию, и во всех трех случаях имя хеша имеет префикс, чтобы вы знали, какое оно есть. ssh-keygen -l имеет -E вариант только с тех пор, а Ubuntu 14.04 датируется до марта 2015 года.

Для проверки хоста не требуется дайджест SHA1 в шестнадцатеричном формате, поскольку ssh клиент никогда не отображает это, только MD5-hex или SHA1-base64 (не по умолчанию) или SHA256-base64. В любом случае, если он вам нужен, вы можете сделать это довольно легко, за исключением ключа rsa1, и вам следует прекратить использование протокола SSHv1 и, следовательно, ключей rsa1 до того, как Барак Обама станет президентом США.

Возьмите base64 'blob' из

  • поле 2 из id_$alg.pub или аналогичный файл, или вывод ssh-keygen -y
  • поле 3 строки в known_hosts файл, если у него нет маркера, а затем поле 4
  • поле 2 строки в authorized_keys файл, если он не имеет параметров, то поле 3

и преобразовать его из base64 в двоичный файл, хэшируйте его с желаемым хешем и отображайте в желаемом представлении. поскольку openssl по умолчанию отображает хэши в шестнадцатеричном виде и может конвертировать из (и в) base64, вы можете сделать что-то вроде

awk '{$print $2}' id_xxx.pub | openssl base64 -d -A | openssl sha1

Обратите внимание -A; в противном случае openssl молча не сможет декодировать base64 длиннее 76 символов, а капли OpenSSH pubkey, кроме ed25519, длиннее.

Также обратите внимание, что вы можете сказать более новый ssh клиент для отображения старого отпечатка MD5-hex с -o FingerprintHash=MD5 или эквивалент ssh_config установка.

Эти строки выглядят как хеши, закодированные в base64.

Другие вопросы по тегам