SSH known hosts

Aus VGKB
Zur Navigation springen Zur Suche springen

Die known_hosts-Datei liegt standardmäßig in ~/.ssh/known_hosts und wird in der man ssh(1) definiert als:

    ~/.ssh/known_hosts
            Contains a list of host keys for all hosts the user has logged
            into that are not already in the systemwide list of known host
            keys.  See sshd(8) for further details of the format of this
            file.

Host entfernen

Internet-news-reader.svg Dieser Artikel wurde bereits in einem Blogartikel von vNotes behandelt.

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

sed -i '60d' /home/user/.ssh/known_hosts

Anpassungen bzgl. der Zeilennummer (hier 60) 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.

Weiterführende Informationen