Vraag Hoe mijn .ssh / known_hosts bestand te beheren


Ik run een Ubuntu-desktop met een heleboel virtuele servers in Virtual Box om dingen uit te testen, enz. In het verleden heb ik ook verbinding gemaakt met andere soorten VPS Linux-boxen op afstand. Momenteel mijn .ssh/known_hosts bestand bevat een hele reeks sleutels, waarvan de meeste niet meer worden gebruikt.

Ik wil mijn opruimen .ssh/known_hosts bestand, maar hoe weet ik welke sleutel bij welke host hoort? D.w.z. hoe weet ik welke sleutels ik veilig kan verwijderen en welke ik met rust moet laten?


42
2018-06-21 02:04


oorsprong




antwoorden:


Om erachter te komen welk item voor een bekende hostnaam in bekende_hosts is:

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

Om een ​​enkel gegeven uit bekende_hosts te verwijderen:

 # ssh-keygen -R <hostname or IP address>

58
2017-09-16 23:50





Als je een lijst hebt met al je hosts, kun je iets als doen

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

Dat zal uw .ssh / known_hosts-bestand overschrijven met een nieuw gegenereerd bestand op basis van het scannen van de hosts.

En doe ook wat deotherreceive suggereert; HashKnownHosts is meer ergernis dan hulp hier.


25
2018-06-21 03:08



ssh-keyscan heeft een zeer strenge opmaakregels van de list_of_hosts het dossier. Het moet gewoon de geadresseerde zijn en geen andere spatie dan LF na elk adres. Dat omvat LF na het laatste adres. Anders krijg je veel rotzooi in het gegenereerde bestand. - Nux


Met moeite...

Ubuntu hashes standaard hasnames het bekende_hosts-bestand (dit is niet het standaard openssh-gedrag), om het voor iedereen die het bestand leest moeilijk te maken om te weten welke systemen u opent.

Als je het bestand echt wilt opruimen, is het waarschijnlijk de eenvoudigste optie om het te verwijderen en de sleutels te controleren op servers waarvan je weet dat ze opduiken, maar eigenlijk zou ik bekende_hosts met rust laten.

Je kunt voorkomen dat nieuwe hosts-items gehasht worden door de optie in / etc / ssh / ssh_config uit te geven

#HashKnownHosts yes

20
2018-06-21 02:36



Het opruimen van ~ / .ssh / known_hosts helpt ook als de configuratie van de externe host verandert en ssh een waarschuwing toont. Men moet hier echter voorzichtig mee zijn en negeer de waarschuwing alleen voor vertrouwde hosts. - Alex
Een betere optie zou kunnen zijn om uit te leggen hoe je de hash voor een specifieke hostnaam genereert, waardoor hij naar hash kan zoeken in bekende_hosts, zodat hij deze kan updaten. - Cerin
Na bovenstaande wijziging voegt u gewoon een nieuw item toe, bijvoorbeeld door verbinding te maken met een nieuwe server met ssh root@something-new-or-new-dns-alias. Hiermee wordt het origineel vernieuwd known_hosts bestand en de-crypt de hostnamen / IP's. - Nux


Ik had meer dan 300 oude oude ingangen in mijn bekend_hostsbestand. Niet zeker of het voor alle systemen (of zelfs voor de meeste systemen) zal werken, maar hier is mijn Q & D-script. Mogelijk moet u de overeenkomende tekenreeksen of locatie aanpassen.

#!/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