Periksa sidik jari untuk kunci ECDSA yang dikirim oleh host jarak jauh [tertutup]

24

Saya telah mendapatkan pesan peringatan yang terkenal saat mencoba ssh ke server:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

Dan saya tahu mengapa karena saya mengubah ip server tersebut. Tetapi jika tidak, bagaimana saya bisa memeriksa sidik jari untuk kunci ECDSA yang dikirim oleh host jarak jauh?

Saya telah mencoba melakukannya dengan:

echo -n ipofthehost | sha256sum

Tapi saya tidak mendapatkan sidik jari yang sama. Saya juga mencoba "hostname, ip" seperti di aws tapi saya tidak cocok.

Jika saya menghapus pintu masuk dari file known_hosts saya dan saya mencoba ssh lagi, itu berhasil dan memberi tahu berikut ini:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

Jadi untuk apa menerapkan sha256sum untuk mendapatkan sidik jari dan bagaimana saya bisa memeriksanya?

gugol
sumber
2
Tanpa nilai bagus yang diketahui Anda tidak dapat memeriksanya. Anda hanya menuliskannya saat pertama kali memulai SSHd dan kunci dibuat, dan memeriksa nilai yang diketahui baik itu.
Saya mengedit pertanyaan Anda. Situs ini hanya menerima pertanyaan tentang lingkungan bisnis profesional. Pertanyaan-pertanyaan jaringan rumah tidak aktif di sini, saya mencoba menyimpan pertanyaan Anda dengan hasil edit saya. Saat ini ada suara menentang pertanyaan Anda untuk menutup itu di tanah ini.
peterh mengatakan mengembalikan Monica
@ user186340 Tampaknya benar bahwa "Anda hanya menuliskannya saat pertama kali memulai SSHd". Jika Anda memiliki akses ke mesin yang menjalankan SSHd, Anda dapat melakukannya /etc/ssh/ssh_host_ecdsa_key.pubuntuk mendapatkan sidik jari. Saya baru saja melakukannya.
jamadagni

Jawaban:

12

Sidik jari kunci publik bukan hash sederhana dari string IP.

Untuk mengambil kunci publik host jarak jauh yang dapat Anda gunakan ssh-keyscan <IP>maka Anda dapat menggunakan alat biasa untuk mengekstrak sidik jarinya ( ssh-keygen -lf <public_key_file>).

Akhirnya Anda dapat membandingkan dengan sidik jari saat ini di known_hostsfile Anda dengan ssh-keygen -l -F <domain_or_ip>.

Xavier Lucas
sumber
2
Saya bingung mengapa ketika menghubungkan melalui SSH dan memaksa kunci ecdsa untuk pertama kali ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' [email protected]) itu memberi saya sidik jari alfanumerik 43 digit ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.) namun ketika saya menjalankan ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubsaya mendapatkan hex karakter 32 ??
William Turrell
1
@WilliamTurrell Ini terjadi karena server Anda harus memiliki versi yang lebih lama (kemungkinan pra-openSSH 6.8) ssh-keygen(atau penyedia server Anda tidak mengikuti perkembangan zaman dan masih hanya menyediakan hash md5 alih-alih SHA256 yang baru). Ada beberapa solusi yang tercantum di sini: superuser.com/questions/929566
SeldomNeedy
9

Sedikit lebih detail : Karena pesan peringatan mengacu pada sidik jari untuk kunci ECDSA yang dikirim oleh host jarak jauh, kami mengumpulkan info tentang kunci publik (ecdsa) dari host:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

Lalu kita bisa mencari tahu di mana di file known_hosts kita bahwa kunci publik (ecdsa) adalah:

ssh-keygen -l -F ipofhost

Jika kita ingin membandingkan sidik jari kita harus meletakkan konten file known_hosts kita (hanya entri yang terkait dengan host ini), kita dapat menyebutnya ecdsa_file_from_known_hosts dan kemudian membandingkannya sebagai berikut:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

Dan periksa apakah acaranya sama.

Tentu saja mereka tidak cocok, itu sebabnya saya mendapat pesan peringatan (ssh memeriksa pencocokan ini secara internal). Jika kami yakin tentang perubahan ip (jadi kami tidak menderita serangan man-in-the-middle), kami cukup menghapus entri host itu di file known_hosts kami dan saat berikutnya kami ssh ke dalamnya entri baru baru untuk itu akan ditambahkan ke file tersebut.

gugol
sumber