SSH: Host aus der known_hosts entfernen

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.

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.

Löschen geht dann über

LESETIPP  LibreOffice-Tipp: Zeilen oder Spalten in Calc fixieren

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.

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 Infos

man ssh-keygen, man sed, Variante 3

Gefällt dir der Artikel? Dann empfiehl ihn weiter!

5 Gedanken zu „SSH: Host aus der known_hosts entfernen“

  1. Hi,

    damit bleibt aber neben dem Hostnamen noch die IP in der known_hosts zurück.
    Um den wegzuräumen: ssh-keygen -R 192.168.x.x

    Um beides aufzuräumen kann man sich in der .bashrc auch eine Function schreiben:

    function sa() { ssh-keygen -R $1 ;ssh-keygen -R $( dig +search +short $1 ); }

    „sa“ für SSH-Aufräumer, Nutzung:
    sa servername

    Kontrolle ob der Eintrag in der known_hosts weg ist:
    ssh-keygen -H -F servername

    Anm. von Viktor: [20.02. 14:06 Uhr] habe deine korrigierte (dritte) Fassung nun in den Originalkommentar übernommen, da dies übersichtlicher für den Thread ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.