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


40

Кажется, что openssh изменил способ отображения ключевых отпечатков пальцев.

Я пытаюсь SSH с клиентского компьютера на сервер:

  • клиент: 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.

Как я могу получить контрольную сумму ключа сервера в том же формате, который сообщал (более старый) клиент (шестнадцатеричные цифры, разделенные двоеточиями, хэш sha1), чтобы проверить, что они совпадают?

РЕДАКТИРОВАТЬ: старая версия 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?) Вместо шестнадцатеричной строки. «Все, что харакири» (подходящее описание!) - это самый простой способ найти шестнадцатеричную строку старого стиля из новой версии инструментов openssh.
стохастик

Если FreeBSD не сломает что-либо (или не уберет поддержку MD5), нет никаких причин, почему это не должно работать. Обратите внимание, что ваша команда ошибочно перечисляет sha1вместо md5! У меня устаревшая версия Ubuntu с openssh-6.9, но она работает просто отлично.
Jakuje

1
md5 вместо sha1 ... не уверен, как я это пропустил. Это действительно дает соответствующий результат.
стохастик

У меня противоположная проблема. У меня есть MD5 и хочу другой формат. Как мне это получить?
Габриэль Стейплс

1
Работает, когда команда выполняется в Ubuntu. Не работает, когда команда выполняется на centos.
Маринос Ан

5

Оказывается, в SSH Cookbook есть способ генерировать ключи в старом шестнадцатеричном формате вручную. Я использовал это на сервере freebsd.

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

Разбивая это:

awk '{print $ 2}' key.pub

распечатать второй (разделенный пробелами) столбец в «key.pub», который является самим ключом

base64 -d

ключ в кодировке base64. Это выведет фактические байты ключа

md5

это эквивалент freebsd для 'md5sum -b', который был указан в рецепте на странице ssh cookbook

sed 's /../&:/ g; 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.