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.

Xorax
sumber
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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
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.

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