dapatkan sidik jari kunci SSH dalam format hex (lama) pada versi openssh baru

40

Tampaknya openssh telah mengubah cara menampilkan sidik jari kunci.

Saya mencoba ssh dari mesin klien ke server:

  • client: ubuntu 14.04 menjalankan OpenSSH 6.6.1
  • server: FreeBSD menjalankan OpenSSH 7.2p2.

Klien melaporkan hash md5 dari kunci server sebagai urutan 16 pasang angka hex, seperti ini:

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

Server secara default menggunakan hash sha256, tetapi berkat jawaban ini saya bisa memaksanya untuk memberikan hash sha1 dengan menjalankan:

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

Saya ingin hasilnya terlihat seperti ini:

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

tetapi sebaliknya saya mendapatkan ini:

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

Bagi saya itu seperti versi sidik jari base64 yang dikodekan sekarang sedang ditampilkan alih-alih digit hex.

Bagaimana saya bisa mendapatkan checksum dari kunci server dalam format yang sama seperti yang dilaporkan oleh klien (yang lebih tua) (angka hex yang dipisahkan dengan titik dua, sha1 hash) untuk mengecek apakah semuanya sama?

EDIT: Versi lama SSH memberikan checksum md5 , bukan checksum sha1 seperti yang saya pikir salah. Menggunakan checksum itu (sebagai jawaban yang sekarang diterima harus menyatakan) dalam opsi -E memberikan output yang diinginkan.

stokastik
sumber

Jawaban:

52

Klien melaporkan hash sha1 kunci server sebagai urutan 16 pasang angka hex, seperti ini:

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

Ini hash MD5.

Seperti yang Anda lihat berjalan

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

akan memberi Anda sidik jari yang sama yang Anda butuhkan tanpa harakiri seperti yang Anda jelaskan dalam jawaban Anda.

Jakuje
sumber
1
Sayangnya, ini tidak berhasil. Pertanyaan saya berisi hasil menjalankan perintah yang Anda sarankan. Versi ssh-keygen yang lebih baru memberikan hash md5 sebagai string (base64 encoded?) Alih-alih string hex. "Semua itu harakiri" (deskripsi yang tepat!) Adalah cara termudah yang bisa saya temukan untuk mendapatkan string hex gaya lama dari versi baru alat openssh.
Stochastic
Kecuali FreeBSD memecahkan sesuatu (atau menghapus dukungan MD5), tidak ada alasan mengapa itu tidak bisa berfungsi. Perhatikan bahwa perintah Anda salah daftar, sha1bukan md5! Saya sudah ketinggalan zaman versi Ubuntu dengan openssh-6.9, tetapi berfungsi dengan baik.
Jakuje
1
md5 bukannya sha1 ... tidak yakin bagaimana saya melewatkan itu. Itu memang memberikan hasil yang cocok.
stokastik
Saya memiliki masalah sebaliknya. Saya memiliki md5 dan menginginkan format lainnya. Bagaimana saya mendapatkannya?
Gabriel Staples
1
Bekerja ketika perintah dijalankan di ubuntu. Tidak berfungsi ketika perintah dijalankan pada centos.
Marinos An
5

Ternyata, Cookbook SSH memiliki cara untuk menghasilkan kunci secara manual dalam format hex yang lebih lama. Saya menggunakan ini di server freebsd.

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

Hancurkan ini:

awk '{print $ 2}' key.pub

cetak kolom kedua (dipisahkan spasi) di "key.pub", yang merupakan kunci itu sendiri

base64 -d

kuncinya adalah base64 disandikan. Ini akan menampilkan byte kunci yang sebenarnya

md5

ini setara dengan freebsd dari 'md5sum -b' yang ditentukan dalam resep di halaman buku resep ssh

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

Ada dua perintah sed di sini:

s /../&:/g;

ganti setiap pasangan karakter di telepon (berkat bendera 'g' di akhir) dengan pasangan yang sama diikuti oleh titik dua

s /:. * $ // '

hapus semua trailing colon (ganti sebuah colon diikuti oleh spasi diikuti oleh apapun hingga akhir baris tanpa apa-apa).

stokastik
sumber
4

Dalam kasus seperti ini saya menggunakan skrip kecil berikut (diuji pada Debian dan 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

Contoh penggunaan:

$ 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
sumber