отримати відбиток ключа SSH у (старому) шістнадцятковому форматі на новій версії openssh


40

Здається, що opensh змінив спосіб відображення ключових відбитків пальців.

Я намагаюся перейти з клієнтської машини на сервер:

  • клієнт: ubuntu 14.04 під керуванням OpenSSH 6.6.1
  • сервер: FreeBSD під керуванням OpenSSH 7.2p2.

Клієнт повідомляє хеш md5 ключа сервера у вигляді послідовності 16 пар шістнадцяткових цифр, наприклад:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

Сервер за замовчуванням використовує хеш sha256, але завдяки цій відповіді я можу змусити його надати хеш sha1, запустивши:

[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub

Я хочу, щоб результат виглядав так:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

але натомість я отримую це:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI root@host.local (ECDSA)

Мені це здається, що замість шістнадцяткових цифр тепер відображається закодована версія base64, відбитка пальців.

Як я можу отримати контрольну суму ключа сервера у тому самому форматі, що і повідомлення про те, що повідомляється (старшим) клієнтом (двократні шістнадцяткові цифри, двошаровий хеш), щоб перевірити, чи вони однакові?

EDIT: Стара версія SSH дає контрольну суму md5 , а не контрольну суму sha1, як я помилково думав. Використання цієї контрольної суми (як повинна бути прийнята відповідь) у параметрі -E дає бажаний вихід.

Відповіді:


52

Клієнт повідомляє про sha1 хеш ключа сервера у вигляді послідовності 16 пар шістнадцяткових цифр, наприклад:

    a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

Це хеш MD5.

Як бачите біг

ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub

отримає вам той самий відбиток пальців, який вам потрібен без таких харакірі, які ви пояснюєте у своїй відповіді.


1
На жаль, це не працює. Моє запитання містить результат запуску запропонованої команди. Новіші версії ssh-keygen дають хеш md5 як рядок (закодований base64?) Замість шістнадцяткової рядка "Все, що харакірі" (влучний опис!) - це найпростіший спосіб, коли я міг би знайти старий шістнадцятковий рядок стилю з нової версії інструментів opensh.
— стохастичний

Якщо FreeBSD щось не зламає (або не видалить підтримку MD5), немає ніяких причин, чому це не повинно працювати. Зауважте, що ваша команда перераховується неправильно sha1замість md5! У мене застаріла версія Ubuntu з openssh-6.9, але вона працює чудово.
— Jakuje

1
md5 замість sha1 ... не впевнений, як я пропустив це. Це дійсно дає відповідні результати.
— стохастичний

У мене протилежна проблема. У мене є md5 і хочу іншого формату. Як я можу це отримати?
— Габріель Степлес

1
Працює, коли команда виконується на ubuntu. Не працює, коли команда виконується на centos.
— Марінос Ан

5

Як виявляється, у кулінарній книзі SSH є спосіб вручну генерувати ключі у старішому шестигранному форматі. Я використовував це на сервері freebsd.

awk '{print $ 2}' key.pub | base64 -d | md5 | sed 's /../&:/ г; s /:. * $ // '

Порушення цього:

awk '{print $ 2}' key.pub

роздрукувати другий (пробіл) стовпчик у "key.pub", який є самим ключем

base64 -d

ключ закодований base64. Це виведе фактичні байти ключа

md5

це еквівалент freebsd 'md5sum -b', який був вказаний у рецепті на сторінці кухарської книги ssh.

sed 's /../&:/ г; s /:. * $ // '

Тут є дві команди sed:

с /../&:/ г;

замініть кожну пару символів у рядку (завдяки прапорці 'g' наприкінці) тією самою парою, а потім двокрапкою

s /:. * $ // '

видаліть будь-яку крапку двокрапки (замініть двокрапку, а потім пробіл, за яким нічого не до кінця рядка).


4

У таких випадках я використовую такий маленький сценарій (тестований на Debian і Ubuntu):

#!/bin/sh

# Gather the public ssh host keys for the given host
# and for each key print the fingerprint in hex format using the given
# checksum command (e.g. md5sum, sha256sum, ...)

if [ "$#" != 2 ]; then
  echo "usage: $0 hostname checksum_command"
  exit 1
fi

ssh-keyscan $1 2>/dev/null | while read -r line; do
  echo "Scanned key:"
  echo $line
  echo "$2 fingerprint:"
  echo $line | awk '{print $3}' | base64 -d | $2 -b | awk '{print $1}' | sed 's/../&:/g' | sed 's/:$//'
  echo
done

Приклад використання:

$ myscript host.example.com md5sum
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
md5sum fingerprint:
6c:ef:26:f7:98:ad:ed:5b:cc:ff:83:13:46:c9:f6:79

Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
md5sum fingerprint:
b2:9c:cd:30:b1:38:e3:d1:17:d6:73:eb:03:9a:80:83

$ myscript host.example.com sha256sum
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
sha256sum fingerprint:
f4:61:58:e4:90:65:c4:70:98:7f:d1:40:0a:d8:d9:79:14:e6:91:dc:b6:ed:91:8c:c0:df:d9:65:db:dd:a0:18

Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
sha256sum fingerprint:
4b:73:d1:d7:80:87:46:64:56:71:64:10:7a:66:83:9b:c7:58:39:0b:16:74:dd:9b:d9:4b:e5:d5:61:7e:99:45
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.