Кажется, это должно быть легко. Я запускаю «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?
Спасибо.
ОБНОВЛЕНИЕ: этот ответ о OpenSSH отпечатки пальцев. Согласно комментарию от OP, фактическая проблема, по-видимому, была AWS отпечатки пальцев, о которых я тогда не знал, другие; для который видеть Почему мой отпечаток ключа OpenSSH не соответствует отпечатку пары ключей консоли AWS EC2? и https://stackoverflow.com/questions/19251562/importing-key-pair-into-amazon-aws-wrong-fingerprint и возможно больше.
Традиционно 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' из
id_$alg.pub
или аналогичный файл, или вывод ssh-keygen -y
known_hosts
файл, если у него нет маркера, тогда поле 4authorized_keys
файл, если у него нет параметров, тогда поле 3и преобразовать его из base64 в двоичный, хэш с желаемым хешем и отобразить в желаемом представлении. поскольку openssl
по умолчанию отображает хеши в шестнадцатеричном формате и может конвертировать из (и в) base64, вы можете сделать что-то вроде
awk '{print $2}' ~/.ssh/id_xxx.pub | openssl base64 -d -A | openssl sha1
Обратите внимание -A
; в противном случае openssl (в зависимости от версии) может молча не декодировать base64 длиной более 76 символов, а большие двоичные объекты открытого ключа OpenSSH, за исключением ed25519, длиннее. (Спасибо Бернхард Вагнер для обнаружения ошибки - и снова обратить мое внимание на этот старый ответ, чтобы я мог добавить исправление области выше.)
Также обратите внимание, что вы можете сказать более новый ssh
клиент для отображения старого отпечатка пальца MD5-hex с -o FingerprintHash=MD5
или эквивалент ssh_config
настройка.
Эти струны выглядят base64 закодированные хэши.