Pertanyaan Bagaimana mengelola file .ssh / known_hosts saya


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

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


42
2018-06-21 02:04






Jawaban:


Untuk mengetahui entri yang mana adalah 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>

58
2017-09-16 23:50





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 file yang baru dibuat berdasarkan pemindaian host.

Dan juga lakukan apa yang disaranir orang lain; HashKnownHosts lebih menjengkelkan daripada membantu di sini.


25
2018-06-21 03:08



ssh-keyscan memiliki aturan pemformatan yang sangat ketat list_of_hosts mengajukan. Itu harus menjadi hanya addres dan tidak ada spasi lain kemudian LF setelah setiap alamat. Itu termasuk LF setelah alamat terakhir. Kalau tidak, Anda akan mendapatkan banyak sampah di file yang dihasilkan. - Nux


Dengan susah payah ...

Ubuntu dengan hash default hostname nama file known_hosts (ini bukan perilaku default openssh), untuk menyulitkan orang yang membaca file untuk mengetahui sistem apa yang Anda akses.

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

Anda dapat menghentikan entri host baru agar tidak di-hash dengan mengomentari opsi di / etc / ssh / ssh_config

#HashKnownHosts yes

20
2018-06-21 02:36



Membersihkan ~ / .ssh / known_hosts juga membantu ketika konfigurasi host remote berubah dan ssh menampilkan peringatan. Namun orang harus berhati-hati dengan itu dan mengabaikan warnnig hanya untuk host tepercaya. - Alex
Pilihan yang lebih baik mungkin untuk menjelaskan cara menghasilkan hash untuk nama host tertentu, memungkinkan dia untuk mencari hash itu di known_hosts sehingga dia dapat memperbaruinya. - Cerin
Setelah perubahan di atas, tambahkan saja entri baru, mis. dengan menghubungkan ke server baru dengan ssh root@something-new-or-new-dns-alias. Ini akan menyegarkan aslinya known_hosts file dan de-crypting nama host / IP. - Nux


Saya memiliki lebih dari 300 entri lama yang membosankan di file known_hosts saya. Tidak yakin itu akan bekerja untuk semua sistem (atau bahkan sebagian besar sistem) tetapi 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

2
2017-12-31 23:34