Viele Linux-Admins, die Hosts neu aufgesetzt haben, kennen dies: bei einem Connect über SSH mit der Neuinstallation haben sich natürlich auch die für den SSH-Betrieb nötigen Keys neu generiert und stimmen somit nicht mehr mit denen aus der known_hosts überein. Das Resultat: eine Man-in-the-Middle-Warnung. Die Warnung ist zwar richtig und gut, aber in diesem Fall nicht hilfreich. Unser SSH-Client muss einfach die Keys vergessen.
Hierfür gibt es insbesondere drei Ansätze: einen "sanften", einen "harten" und einen temporären.
Variante 1: den Key über ssh-keygen entfernen. Klingt zwar etwas komisch, da man bei diesem Kommando lediglich an einen Keygenerator denkt, aber ssh-keygen übernimmt auch das Management der known_hosts.
ssh-keygen -R hostname [-f known_hosts_file]
Das ist die sicherste Methode, zudem wird automatisch ein Backup als .old der bisherigen Datei angelegt. Die Option -f ist nicht nötig, wenn die Standardpfade eingesetzt werden.
Variante 2: der "harte" Weg. Hier löschen wir die Zeile per sed raus. Diese Variante ist eher für erfahrene Admins gedacht. Die Zeilennummer liefert uns die Fehlermeldung.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:123456789. Please contact your system administrator. Add correct host key in /home/user/.ssh/known_hosts to get rid of this message. Offending RSA key in /home/user/.ssh/known_hosts:60 ECDSA host key for my.dom.tld has changed and you have requested strict checking. Host key verification failed.
Löschen geht dann über den bei den meisten Linux-Systemen direkt mitgelieferten stream editor, der die entsprechende Datei bearbeiten kann und die Zeile entfernt:
sed -i '60d' /home/user/.ssh/known_hosts
Anpassungen bzgl. der Zeilennummer (hier 60) und dem Username nicht vergessen!
Variante 3: known_hosts-Überprüfung temporär deaktivieren. Ich führe das der Vollständigkeit halber auf, da es in bestimmten Fällen hilfreich ist. Das Kommando ist aber nur für jene gedacht, die wissen, warum sie es abschalten. Immerhin setzt man damit bei dem jeweiligen Connect einen sinnvollen Sicherheitsmechanismus außer Kraft.
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no me@my.machine.tld
Hier wird einfach /dev/null als known_hosts-Pfad gesetzt und mit StrictHostKeyChecking=no eine Nachfrage für das Hinzufügen des Keys übergangen. Der SSH-Client sieht die Verbindung natürlich als erste Verbindung mit dem Host, weil er ja keinen Eintrag in der /dev/null dazu findet.