Gibt es eine einfache Möglichkeit, Informationen in known_hosts zu aktualisieren, wenn Sie wissen, dass sich ein Host-Schlüssel geändert hat?

38

Wenn das Betriebssystem eines Hosts neu installiert wurde und sein öffentlicher Schlüssel neu generiert wurde, schlägt sshing natürlich fehl, da der neue Schlüssel nicht mit dem alten übereinstimmt.

Gibt es eine einfachere Möglichkeit, ssh mitzuteilen, dass Sie wissen, dass sich der Schlüssel des Hosts geändert hat und dass er aktualisiert werden soll? Ich denke, es fühlt sich ein bisschen fehleranfällig an, einen Texteditor oder etwas wie sed zu verwenden, um die störende Linie zu entfernen.

Sam
quelle
Dies dupliziert eine Frage zum Superuser . Sehen Sie die detaillierteren Informationen dort.
Yitz

Antworten:

59

Verwenden ssh-keygen -R hostnameSie diese Option, um den Hostnamen aus Ihrer Datei known_hosts zu entfernen. Wenn Sie das nächste Mal eine Verbindung herstellen, wird der neue Hostschlüssel zu Ihrer Datei known_hosts hinzugefügt.

jsbillings
quelle
12
TARGET_HOST=[hostname or IP]

# Remove the old key(s) from known_hosts
ssh-keygen -R $TARGET_HOST

# Add the new key(s) to known_hosts (and also hash the hostname/address)
ssh-keyscan -H $TARGET_HOST >> ~/.ssh/known_hosts

Das nächste Mal , wenn Sie verbinden, werden verbinden Sie ohne gefragt zu werden , Are you sure you want to continue connecting (yes/no)?da bereits in der sein wird , die Schlüssel - known_hostsDatei.

Earl Ruby
quelle
1
siehe auch StrictHostKeyChecking in ~ / .ssh / config
Jeff Schaller
1
Ich würde einen anderen Variablennamen verwenden ... HOST befindet sich in einigen Shells und gibt Ihren eigenen Hostnamen an. Daher würde ich es vorziehen, ihn nicht zu ändern (ich weiß, man kann nur dann beenden oder dies aus einer Subshell heraus tun, aber immer noch) , warum nicht thehoststattdessen? oder so etwas. Eine ALLCAPS-Variable könnte mit einem reservierten internen Namen kollidieren. Kleinbuchstaben sollten nicht.)
Olivier Dulac
Diesen Schlüsseln in known_hosts werden einige Zeichen vorangestellt, die mit | 1 | beginnen. Das Zeug wird nicht über diese Methode an die Datei angehängt, oder irre ich mich? Was ist dann der Unterschied, denn was ssh-keyscan zurückgibt, beginnt nicht mit | 1 |
Daniel F
1
(@ DanielF +) , wenn Sie Hash - Format verwenden und akzeptierten die Taste (n) in sshgibt es getrennte Einträge für die Hostnamen und die Adresse (n), so sollten Sie ssh-keygen -R jede von ihnen Konflikte zu vermeiden
dave_thompson_085