it-swarm.com.de

Wie verwalte ich meine .ssh / unknown_hosts-Datei?

Ich verwende einen Ubuntu-Desktop mit einer Reihe von virtuellen Servern in Virtual Box, um Dinge usw. zu testen. In der Vergangenheit habe ich auch eine Verbindung zu anderen Arten von Remote-VPS-Linux-Boxen hergestellt. Derzeit enthält meine .ssh/known_hosts - Datei eine ganze Reihe von Schlüsseln, von denen die meisten nicht mehr verwendet werden.

Ich möchte meine .ssh/known_hosts - Datei bereinigen, aber woher weiß ich, welcher Schlüssel zu welchem ​​Host gehört? Das heißt, Woher weiß ich, welche Schlüssel ich sicher entfernen kann und welche ich in Ruhe lassen sollte?

49
Luke

So finden Sie heraus, welcher Eintrag für einen bekannten Hostnamen in unknown_hosts gilt:

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

So löschen Sie einen einzelnen Eintrag aus bekannten_Hosts:

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

Wenn Sie eine Liste aller Ihrer Gastgeber haben, können Sie so etwas tun

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

Dadurch wird Ihre .ssh/unknown_hosts-Datei mit einer neu generierten Datei überschrieben, die auf dem Scannen der Hosts basiert.

Und tun Sie auch, was der Empfänger vorschlägt. HashKnownHosts ist hier eher ärgerlich als hilfreich.

27
freiheit

Mit Schwierigkeiten...

Ubuntu hascht standardmäßig die Hostnamen der Datei "unknown_hosts" (dies ist nicht das Standardverhalten von openssh), damit jeder, der die Datei liest, nicht weiß, auf welche Systeme Sie zugreifen.

Wenn Sie die Datei wirklich bereinigen wollten, ist es wahrscheinlich die einfachste Option, sie zu löschen und die Schlüssel auf Server zu überprüfen, von denen Sie wissen, dass sie entstehen, aber ich würde bekannte_Hosts einfach in Ruhe lassen.

Sie können verhindern, dass neue Hosteinträge gehasht werden, indem Sie die Option in/etc/ssh/ssh_config auskommentieren

#HashKnownHosts yes
21
theotherreceive

Ich hatte über 300 veraltete alte Einträge in meiner Datei "unknown_hosts". Ich bin mir nicht sicher, ob es für alle Systeme (oder sogar für die meisten Systeme) funktioniert, aber hier ist mein Q & D-Skript. Möglicherweise müssen Sie die passenden Zeichenfolgen oder Positionen anpassen.

#!/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  [email protected]${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
user1953828