uzyskaj odcisk palca klucza SSH w (starym) formacie szesnastkowym w nowej wersji openssh

40

Wygląda na to, że openssh zmienił sposób wyświetlania kluczowych odcisków palców.

Próbuję ssh z komputera klienckiego na serwer:

  • klient: ubuntu 14.04 z uruchomionym OpenSSH 6.6.1
  • serwer: FreeBSD z uruchomionym OpenSSH 7.2p2.

Klient zgłasza skrót md5 klucza serwera jako sekwencję 16 par cyfr szesnastkowych, takich jak:

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

Serwer domyślnie używa skrótu sha256, ale dzięki tej odpowiedzi mogę zmusić go do podania skrótu sha1, uruchamiając:

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

Chcę, aby wynik wyglądał tak:

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

ale zamiast tego otrzymuję to:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI [email protected] (ECDSA)

Wydaje mi się, że zamiast cyfr szesnastkowych wyświetlana jest teraz wersja odcisku palca zakodowana w standardzie base64.

Jak mogę uzyskać sumę kontrolną klucza serwera w takim samym formacie, jak zgłoszony przez (starszego) klienta (cyfry szesnastkowe oddzielone dwukropkami, skrót sha1), aby sprawdzić, czy są one takie same?

EDYCJA: Stara wersja SSH podaje sumę kontrolną md5 , a nie sumę kontrolną sha1, jak błędnie myślałem. Użycie tej sumy kontrolnej (jak powinna teraz brzmieć akceptowana odpowiedź) w opcji -E daje pożądane wyjście.

stochastyczny
źródło

Odpowiedzi:

52

Klient zgłasza skrót sha1 klucza serwera jako sekwencję 16 par cyfr szesnastkowych, takich jak:

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

To jest skrót MD5.

Jak widać bieganie

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

otrzymasz taki sam odcisk palca, jakiego potrzebujesz, bez takich harakiri, które wyjaśnisz w swojej odpowiedzi.

Jakuje
źródło
1
Niestety to nie działa. Moje pytanie zawiera wynik uruchomienia sugerowanego polecenia. Nowsze wersje ssh-keygen dają hash md5 jako ciąg (zakodowany w base64?) Zamiast ciągu szesnastkowego. „All that harakiri” (trafny opis!) To najprostszy sposób, w jaki udało mi się znaleźć ciąg szesnastkowy w starym stylu z nowej wersji narzędzi openssh.
stochastyczny
O ile FreeBSD czegoś nie zepsuje (lub nie usunie obsługi MD5), nie ma powodu, dla którego miałby nie działać. Zauważ, że twoje polecenie wyświetla niepoprawnie sha1zamiast md5! Mam przestarzałą wersję Ubuntu z openssh-6.9, ale działa dobrze.
Jakuje
1
md5 zamiast sha1 ... nie jestem pewien, jak mi tego brakowało. To rzeczywiście daje pasujące wyjście.
stochastyczny
Mam odwrotny problem. Mam md5 i chcę inny format. Jak to dostać?
Gabriel Staples,
1
Działa, gdy polecenie jest wykonywane na Ubuntu. Nie działa, gdy polecenie jest wykonywane na centos.
Marinos An
5

Jak się okazuje, książka kucharska SSH ma sposób na ręczne generowanie kluczy w starszym formacie szesnastkowym. Użyłem tego na serwerze freebsd.

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

Podział tego:

awk '{print $ 2}' key.pub

wydrukuj drugą kolumnę (oddzieloną spacją) w „key.pub”, która jest samym kluczem

base64 -d

klucz jest zakodowany w standardzie base64. Spowoduje to wyświetlenie rzeczywistych bajtów klucza

md5

jest to odpowiednik freebsd dla „md5sum -b”, który został określony w przepisie na stronie książki kucharskiej ssh

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

Są tutaj dwa polecenia sed:

s /../&:/ g;

zamień każdą parę znaków w linii (dzięki flagi „g” na końcu) tą samą parą, po której następuje dwukropek

s /:. * $ // '

usuń końcowy dwukropek (zastąp dwukropek, a następnie spację, a następnie wszystko do końca wiersza bez niczego).

stochastyczny
źródło
4

W takich przypadkach używam następującego skryptu (testowanego na Debianie i 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

Przykładowe użycie:

$ 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
rpr
źródło