отримати відбиток ключа 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.