Получение 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
установка.