Apakah ada cara untuk mendapatkan sidik jari kunci server SSH secara terprogram tanpa mengautentikasi itu?
Saya mencoba ssh -v user@host false 2>&1 | grep "Server host key"
, tetapi ini hang menunggu kata sandi jika kunci berbasis auth tidak diatur.
ssh-keygen -l -f - <(ssh-keyscan host)
?ssh-keyscan host | ssh-keygen -lf -
ssh-keygen -l -f <(ssh-keyscan host)
ssh-keygen -l -f -
bekerja seperti yang diharapkan pada ssh-keygen 7.2 dan di atasnya. Ini menghasilkan beberapa baris komentar untuk STDERR yang dapat disaring, seperti yang disebutkan dalam jawaban oleh Anthony Geoghegan ataussh-keyscan host 2>/dev/null | ssh-keygen -l -f -
Saya baru-baru ini harus melakukan ini sendiri jadi saya pikir saya akan menambahkan jawaban yang menunjukkan bagaimana hal ini dapat dilakukan (dengan versi OpenSSH 7.2 atau lebih baru ) dalam satu baris menggunakan proses substitusi:
Teks berikut ini menjelaskan cara kerja perintah ini dan menyoroti beberapa perbedaan perilaku antara versi OpenSSH yang lebih lama dan yang lebih baru.
Ambil kunci host publik
The
ssh-keyscan
perintah dikembangkan sehingga pengguna dapat memperoleh kunci publik tuan rumah tanpa perlu otentikasi ke server SSH. Dari halaman manualnya:Jenis kunci
Jenis kunci yang akan diambil ditentukan menggunakan
-t
opsi.rsa1
(Protokol SSH versi usang 1)rsa
dsa
ecdsa
(versi terbaru dari OpenSSH)ed25519
(versi terbaru dari OpenSSH)Dalam rilis OpenSSH modern, tipe kunci default yang akan diambil adalah
rsa
(sejak versi 5.1),ecdsa
(sejak versi 6.0), daned25519
(sejak versi 6.7).Dengan versi dari
ssh-keyscan
(sebelum OpenSSH versi 5.1), yang standar jenis kunci adalah keluar-tanggalrsa1
(SSH Protokol 1) sehingga jenis kunci akan perlu secara eksplisit ditentukan:Dapatkan hash sidik jari dari tombol Base64
ssh-keyscan
mencetak kunci host dari server SSH dalam format yang disandikan Base64 . Untuk mengonversi ini menjadi hash sidik jari,ssh-keygen
utilitas dapat digunakan dengan-l
opsi untuk mencetak sidik jari dari kunci publik yang ditentukan.Jika menggunakan Bash, Zsh (atau Korn shell), substitusi proses dapat digunakan untuk satu-liner yang praktis:
Catatan : Dengan versi OpenSSH sebelum 7.2, fungsi yang digunakan
ssh-keygen
untuk membaca file, tidak menangani pipa bernama (FIFOs) dengan sangat baik sehingga metode ini tidak akan berfungsi, sehingga membutuhkan penggunaan file sementara.Algoritma Hashing
Versi terbaru dari
ssh-keygen
cetakan hash sidik jari SHA256 . Untuk mendapatkan hash MD5 dari sidik jari kunci server (perilaku lama),-E
opsi dapat digunakan untuk menentukan algoritma hash:Menggunakan pipa
Jika menggunakan shell POSIX (seperti
dash
) yang tidak menampilkan subtitusi proses, solusi lain menggunakan file sementara akan berfungsi. Namun, dengan versi OpenSSH yang lebih baru (sejak 7.2), sebuah pipa sederhana dapat digunakan karenassh-keygen
akan menerima-
sebagai nama file untuk aliran input standar, yang memungkinkan perintah pipa satu baris.sumber
ssh-keygen
dari versi OpenSSH yang lama memiliki masalah dalam membaca dari pipa FIFO / bernama. Saya akan melihat ini (dan memperbarui jawaban saya) ketika saya mendapatkan waktu luang.printf
pernyataan debugging dalamdo_fingerprint()
fungsi, saya menemukan bahwa dengan versi OpenSSH sebelum 7.2, fungsi yang digunakanssh-keygen
untuk membaca file, tidak menangani pipa bernama (FIFOs) dengan sangat baik sehingga metode substitusi proses tidak akan berfungsi.nmap
menyediakan kemampuan ini dengan menggunakanssh-hostkey
skrip.Untuk mengembalikan sidik jari heksadesimal kunci:
Untuk mengembalikan konten kunci:
Untuk mengembalikan gelembung visual kunci
Untuk mengembalikan semua hal di atas:
Sumber: nmap docs
sumber
-p
opsi yang dapat menentukan port, mis-p 22000
. Dimungkinkan juga untuk menggunakan-vv
opsi untuk meningkatkan verbositas (jumlah informasi yang diberikan)filezilla menampilkan kunci hash dengan md5 dalam format heksadesimal .
untuk menemukan ini di mesin linux ubuntu Anda gunakan perintah ini:
Catatan: ganti "localhost" dengan ip mesin yang ingin Anda periksa.
sumber
Berikut ini adalah skrip shell (terutama shell Bourne tetapi menggunakan
local
kata kunci, yang tersedia di sebagian besar modern/bin/sh
) saya sudah menulis untuk melakukan ini. Gunakan sepertissh-hostkey hostname
. Ini akan menunjukkan sidik jari format sha256 dan md5 untuk semua hostkeys untuk nama host atau alamat IP yang diberikan. Anda juga dapat secara manual menentukan "md5
" atau "sha256
" sebagai argumen kedua untuk hanya menampilkan format tertentu.Ia menggunakan file temporer bukannya perpipaan untuk membuatnya kompatibel dengan paket OpenSSH yang lebih lama (seperti yang dijelaskan dalam jawaban lain). File sementara menggunakan
/dev/shm
(memori bersama) jika tersedia.sumber