Bagaimana cara mengelola file .ssh / known_hosts saya

47

Saya menjalankan desktop Ubuntu dengan sekelompok server virtual di Virtual Box untuk menguji hal-hal, dll. Di masa lalu saya juga telah terhubung ke jenis lain dari kotak VPS Linux jarak jauh. Saat ini .ssh/known_hostsfile saya memiliki sejumlah kunci di dalamnya, yang sebagian besar tidak digunakan lagi.

Saya ingin membersihkan .ssh/known_hostsfile saya , tetapi bagaimana saya tahu kunci mana yang dimiliki oleh host apa? Yaitu bagaimana saya tahu kunci mana yang dapat saya lepaskan dengan aman dan mana yang harus saya tinggalkan sendiri?

Luke
sumber

Jawaban:

64

Untuk mengetahui entri mana yang memiliki nama host yang dikenal di known_hosts:

 # ssh-keygen -H  -F <hostname or IP address>

Untuk menghapus satu entri dari known_hosts:

 # ssh-keygen -R <hostname or IP address>
mikehapner
sumber
27

Jika Anda memiliki daftar semua host Anda, Anda dapat melakukan sesuatu seperti

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts

Itu akan menimpa file .ssh / known_hosts Anda dengan yang baru dibuat berdasarkan pemindaian host.

Dan juga melakukan apa yang disarankan oleh penerima; HashKnownHosts lebih mengganggu daripada membantu di sini.

freiheit
sumber
ssh-keyscanmemiliki aturan pemformatan list_of_hostsfile yang sangat ketat . Perlu hanya addres dan tidak ada spasi lain maka LF setelah setiap alamat. Itu termasuk LF setelah alamat terakhir. Kalau tidak, Anda mendapatkan banyak sampah di file yang dihasilkan.
Nux
21

Dengan susah payah ...

Ubuntu secara default mem-hash nama host pada file known_hosts (ini bukan perilaku openssh default), untuk mempersulit siapa pun yang membaca file untuk mengetahui sistem apa yang Anda akses.

Jika Anda benar-benar ingin membersihkan file, opsi paling sederhana mungkin hanya menghapusnya dan memeriksa kunci untuk server yang Anda tahu saat mereka muncul, tetapi sebenarnya saya hanya akan meninggalkan known_hosts sendirian.

Anda dapat menghentikan entri host baru dari hash dengan mengomentari opsi di / etc / ssh / ssh_config

#HashKnownHosts yes
theecereceive
sumber
Membersihkan ~ / .ssh / known_hosts juga membantu ketika konfigurasi remote host berubah dan ssh menunjukkan peringatan. Namun orang harus berhati-hati dengan itu dan mengabaikan peringatan hanya untuk host tepercaya.
Alex
6
Opsi yang lebih baik mungkin adalah menjelaskan cara membuat hash untuk nama host tertentu, yang memungkinkannya untuk mencari hash di known_hosts sehingga ia dapat memperbaruinya.
Cerin
1
Setelah perubahan di atas cukup tambahkan entri baru misalnya dengan menghubungkan ke server baru dengan ssh root@something-new-or-new-dns-alias. Ini akan menyegarkan known_hostsfile asli dan menghapus crypt nama host / IP.
Nux
2

Saya memiliki lebih dari 300 entri lama yang sudah basi di file known_hosts saya. Tidak yakin itu akan bekerja untuk semua sistem (atau bahkan sebagian besar sistem) tapi di sini adalah skrip Q&D saya. Anda mungkin harus menyesuaikan string atau lokasi yang cocok.

#!/bin/sh
list=`cat ~/.ssh/known_hosts | awk '{print $1}' |sed -e 's/,/ /g' | sort -u `

listsorted=$(printf "%s\n" ${list[@]} | sort -u)
echo $listsorted
#listsorted="10.2.10.1"
echo > /tmp/sshstat.txt
for host in $listsorted ;
do
echo $host 
ssh -oBatchMode=yes -oConnectTimeout=2  root@${host} "exit" >/tmp/sshstat.txt 2>&1 
ret=$?
if [ $ret -ne 0 ]; then
     echo "Failed: $host"
     echo sed -i.bak \"/$host/d\" "~/.ssh/known_hosts" | sh
else
    grep "Offending RSA" /tmp/sshstat.txt |  sed -e 's/:/ /g' | awk '{printf "sed -i.bak -e \"%dd\" %s  \n", $6, "~/.ssh/known_hosts" }' | sh
   fi
done
#echo $list
pengguna1953828
sumber
Ini tidak berfungsi pada known_hostsfile hash , dan karena si penanya bertanya, "bagaimana saya tahu kunci mana yang dimiliki host apa" Saya pikir sangat mungkin file itu di-hash. Dia mengatakan dia di Ubuntu, dan seperti yang theotherreceivedikatakan, hash Ubuntu secara default.
Neil Mayhew