Bagaimana cara mendekripsi nama host dari .ssh / known_hosts crypted dengan daftar nama host?


14

Saya mencoba menemukan skrip untuk mendekripsi (unhash) nama host ssh dalam file known_hosts dengan mengirimkan daftar hostnamses .

Jadi, untuk melakukan kebalikan dari :

ssh-keygen -H -f known_hosts

Atau juga, untuk melakukan hal yang sama seperti ini jika ssh config HashKnownHosts diatur ke Tidak:

ssh-keygen -R know-host.com -f known_hosts
ssh-keyscan -H know-host.com >> known_hosts

Tetapi tanpa mengunduh ulang kunci host (disebabkan oleh ssh-keyscan).

Sesuatu seperti:

ssh-keygen --decrypt -f known_hosts --hostnames hostnames.txt

Di mana hostnames.txt berisi daftar nama host.


Nama host adalah bagian dari entri di known_hosts. Apa yang harus didekripsi?
muru

1
Maksud saya untuk file crypted known_hosts. Di mana ssh config HashKnownHosts adalah Ya. Saya memodifikasi judulnya.
Xorax

Jawaban:


22

Baris dalam known_hostsfile tidak dienkripsi, mereka di-hash. Anda tidak dapat mendekripsi mereka, karena mereka tidak dienkripsi. Anda tidak dapat “unhash” mereka, karena apa hash adalah semua tentang - diberikan hash, itu impossible¹ untuk menemukan string asli. Satu-satunya cara untuk "melepas" adalah menebak string asli dan memverifikasi tebakan Anda.

Jika Anda memiliki daftar nama host, Anda dapat meneruskannya ssh-keygen -Fdan menggantinya dengan nama host.

while read host comment; do
  found=$(ssh-keygen -F "$host" | grep -v '^#' | sed "s/^[^ ]*/$host/")
  if [ -n "$found" ]; then
    ssh-keygen -R "$host"
    echo "$found" >>~/.ssh/known_hosts
  fi
done <hostnames.txt

¹ Dalam arti praktis, yaitu akan mengambil semua komputer yang ada saat ini lebih lama dari zaman sekarang semesta untuk melakukannya.


13

Halaman manual ssh-keygen (1) mengatakan untuk -F hostnameopsi:

Cari nama host yang ditentukan dalam file known_hosts, daftarkan setiap kejadian yang ditemukan. Opsi ini berguna untuk menemukan nama atau alamat host hash dan juga dapat digunakan bersama dengan -Hopsi untuk mencetak kunci yang ditemukan dalam format hash.

Ini sepertinya yang Anda inginkan.


Ini mengembalikan baris dengan nama host hash. Saya ingin melepasnya untuk menggantinya di file known_hosts. Perlu skrip untuk mengurai setiap baris, batalkan-hash, lalu ganti dalam file known_hosts.
Xorax

2
@Xorax Ya, tetapi dengan perintah ini, Anda dapat mengambil nama host yang di-hash, dan menggantinya dengan known_hostsfile tersebut sed.
vinc17
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.