So beheben Sie Warnungen zu ECDSA-Hostschlüsseln


287

Ich versuche, passwortloses SSH auf einem Ubuntu-Server mit ssh-copy-id myuser@myservereinzurichten, erhalte aber den Fehler:

Warnung: Der ECDSA-Hostschlüssel für "myserver" unterscheidet sich vom Schlüssel für die IP-Adresse "192.168.1.123".

Was ist die Ursache und wie behebe ich das? Ich habe versucht, das .sshVerzeichnis auf dem Remotecomputer zu löschen und es ssh-keygen -R "myserver"lokal auszuführen, aber dies behebt den Fehler nicht.


in meinem fall ändere ich die server (ip) bindung mit der domain, dann die The ECDSA host key for server has changed. Mein Weg ist es, die zugehörige Cache-Zeichenfolge über Domain in zu entfernen ~/.ssh/known_hosts. Dann funktioniert der ssh.
Ninja

Antworten:


415

Entfernen Sie den zwischengespeicherten Schlüssel für 192.168.1.123auf dem lokalen Computer:

ssh-keygen -R 192.168.1.123

14
Funktionierte bei mir nicht auf dem neu installierten Debian-Server bei der Arbeit, wenn SSH von zu Hause aus einläuft. Auch die Antwort ist ziemlich knapp.
Chris K

/home/wf/.ssh/known_hosts aktualisiert. Der ursprüngliche Inhalt wird beibehalten als /home/wf/.ssh/known_hosts.old "Warnung: Der ECDSA-Hostschlüssel für die IP-Adresse 'xxxx' wurde dauerhaft zur Liste der bekannten Hosts hinzugefügt." wird angezeigt. und dann scheint es zu funktionieren
Wolfgang Fahl

13
Sie können den Schlüssel aktualisieren, anstatt ihn zu entfernen. Verwenden Sie ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hostsdanach, dass Sie keinen neuen Schlüssel beim ersten Herstellen einer Verbindung zum Host bestätigen müssen.
Alex

2
Wem es nicht gelingt, es zum Laufen zu bringen: Ich habe mehrere Vorkommen derselben IP registriert: 1 / die IP-Adresse (xx.xx.xx.xx), die Domain (tomsihap.fr), den vps-Server des Anbieters Adresse (vpsxxx.ovh.net). ssh-keygen -R für jede dieser hat die Arbeit erledigt.
Tomsihap

Arbeitete für mich, aber die Verwirrung könnte sein, von welchem ​​Host dieser Befehl ausgeführt werden soll? Die Antwort stammt von der, die den Fehler aufwies. Die zweite Frage und Antwort ist offensichtlicher, aber nur für den Fall: Welche Adresse muss an ssh-keygen -R übergeben werden? Die Adresse, die in der Fehleranweisung angegeben ist.
Russ Bateman

63

In meinem Fall ssh-keygen -R ...hat die Warnung nicht behoben. Ich hatte zusätzliche Informationen wie diese:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

Ich habe ~/.ssh/known_hostsZeile 8 (den "beleidigenden Schlüssel") einfach manuell bearbeitet und gelöscht. Ich habe versucht, die Verbindung wiederherzustellen, der Host wurde permanent hinzugefügt, und danach war alles in Ordnung!


2
Klappt wunderbar. Kann dies in einer Zeile beheben sed -e '8d' /home/myuser/.ssh/known_hosts, indem die Zeilennummer 8und der Dateiname durch die auf Ihrem System angezeigten ersetzt werden.
Alex P. Miller

Mein Problem bei diesem Ansatz war, dass es ein bisschen verwirrend ist, ob sich das known_hosts:8auf einen nullindexierten Wert bezieht oder nicht. Gut zu wissen, dass es ein 1: 1-Mapping ist ...
Daniel F

Mir ist aufgefallen, dass dies passiert, wenn Sie einen nicht standardmäßigen Port wie 2022 verwenden. In diesem Fall müssen Sie dies tunssh-keygen -R [hostname]:2022
Alexander Malfait,

19

Ich arbeite viel zwischen meinen LAN-Computern und meinen beiden Webhosting-Konten. Daher habe ich alle möglichen Probleme mit SSH gelöst, einschließlich Authentifizierungsproblemen, ssh -vum festzustellen, wo und was schief gelaufen ist.

Nachdem ich dieses Problem gerade gelöst hatte und mit den Antworten nicht zufrieden war, wollte ich wirklich wissen, "warum" ich selbst ...

Der Auslöser für meinen Fall ist: Installiertes neues Server-Betriebssystem bei der Arbeit und nach der Installation von openssh-server package wurde ein neuer Satz von Hostschlüsseln auf dem Server von work generiert. Zuvor waren alle meine Server-Betriebssysteme Ubuntu und dieses Mal wurde es auf Debian geändert (und ich vermute, dass es einen nuancierten Unterschied in den Berechtigungen gibt).

Wenn alle Betriebssysteme Ubuntu waren und ich das Betriebssystem eines Servers neu installiere, erhalte ich beim ersten SSH diese Art von Warnung, die ich der stillen Warnung oben vorziehe!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

Dann öffne ich ~/.ssh/known_hostsauf dem Computer die ssh, lösche diese Zeile, stelle die Verbindung wieder her und das passiert:

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

Das bisschen über: 11122 ist die Portnummer, von der ich SSH auf der Firewall route

Ich habe die Backups von einem früheren Ubuntu-Server überprüft und mich von meiner neuen Debian-Installation unterschieden:

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

Also ja, wahrscheinlich hat der Host in letzter Zeit angefangen, Ecdsa-Schlüssel zu verwenden. Aufgrund der Änderungen von Ubuntu in letzter Zeit würde ich ein Update dafür verantwortlich machen. Ubuntus Abkehr von dem absolut soliden Linux-Betriebssystem, mit dem ich gerechnet habe, ist der Grund, warum ich dieses Mal Debian installiert habe.

Ich habe eine security.SE-Frage / Antwort auf ecdsa gelesen und diese Zeile bereits von sshd_configmeinem neuen Debian-Server entfernt. (und rannte service ssh restart)


2
+1 für den netten Side-by-Side-Vergleichsblock. Könnten Sie eine URL hinzufügen, die klarstellt, dass "Ubuntus Abkehr vom Linux-Betriebssystem" bedeutet?
BGoodr

@bgoodr ist meiner Meinung nach und basiert ausschließlich auf der Einrichtung meines eigenen RAID-Dateiservers in den letzten Jahren mehrmals. : / Mist, aber fang an zu googeln ubuntu debian serverund du wirst sehen, was ich meine.
Chris K

1
@ ChrisK Sie, Sir, sind ein Chef. Vielen Dank für die ausführliche und doch präzise Antwort.
Sargas

6

Die Eingabeaufforderung wird jedes Mal angezeigt, da sich die IP-Adressen bei Verwendung der dynamischen Adressierung ständig ändern. Versuchen Sie, eine statische IP-Adresse zu verwenden, damit Sie den Schlüssel nur einmal hinzufügen müssen.


1
Guter Punkt, habe ich vermisst, wo jemand dynamisches IPS erwähnt hat?
Chris K

6

ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.123

Dies sollte die vorhandenen Schlüssel unter known_hosts.old ersetzen und einen neuen erstellen. Diese Lösung hat bei mir im selben Szenario funktioniert


3

Ich habe die folgenden Zeilen zu meiner ~ / .ssh / config hinzugefügt, wodurch die strikte Hostprüfung für alle .local-Adressen deaktiviert wurde. (Bei der Zuweisung von DHCP-Adressen ändern sich die IP-Adressen meiner lokalen Computer ständig.)

host *.local
    StrictHostKeyChecking no

Sie bekommen trotzdem die Warnung, die mir recht ist.


2

Verwenden Sie denselben Benutzer für die Verbindung?

Wenn Sie an einem lokalen PC wie Benutzer John angemeldet und mit dem Server B wie Benutzer Adolf @ B verbunden sind und alles in Ordnung ist, bedeutet dies nicht, dass alles in Ordnung ist, wenn Sie an einem lokalen PC wie Benutzer Jane angemeldet sind und eine Verbindung zum Server herstellen B wie Benutzer Adolf @ B .

Wenn Sie sich auf Server B als Benutzer Beda von PC A aus ohne Kennwort anmelden möchten, führen Sie den folgenden Befehl aus, und zwar von PC A aus :

ssh-keygen -t rsa

Dieser Befehl generiert den Schlüssel und speichert ihn in der Datei. Bitte lassen Sie die Passphrase leer.

ssh Beda@B mkdir -p .ssh

Dieser Befehl erstellt das Verzeichnis, sofern es noch nicht vorhanden ist. Andernfalls drucken Sie keine Fehlermeldung.

cd ~/.ssh

Dieser Befehl ändert das Verzeichnis in das Ausgangsverzeichnis Ihres Benutzers ./ssh.

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

Dieser Befehl druckt die Datei id_rsa.pub (Ihren öffentlichen Schlüssel) in authorized_keys auf dem Server.

WICHTIG: Beda ist Ihr Benutzername auf dem Server, mit dem Sie sich verbinden, B ist Ihre Server-IP.

Jetzt können Sie ohne Kennwort oder Kennwortsatz eine Verbindung zum Server B herstellen:

ssh Beda@B

1
Oder verwenden Sie einfach ssh-copy-id, um eine authorized_keys-Datei ohne zusätzlichen Aufwand mit Ihrem id_rsa.pub-Schlüssel zu füllen.
BlakBat

1

Der Thread hier kann helfen.

Im Wesentlichen möchten Sie sowohl den RSA- als auch den ECDSA-Schlüssel für diesen Host entfernen und dann verwenden ssh-keyscan, um sie auf known_hostseine Weise in Ihre Datei zurückzuspeichern, die diesen Konflikt nicht verursacht. Es hat bei mir funktioniert, als ich das gleiche Problem hatte.


1

Frage: Was ist der Grund dafür?

Also hat sich der SSH-Server-Hostschlüssel geändert. Was hat die Änderung verursacht? Es ist schwer zu sagen. Hier sind einige Vermutungen:

  • Hat sshd auf myserver angefangen, ECDSA-Schlüssel zu verwenden, es ist also ein neuer Schlüsseltyp?
  • Wurde myserver kürzlich neu installiert?
  • Wurde sshd auf myserver kürzlich neu installiert, sodass ein neuer ssh-Hostschlüssel generiert wurde?
  • Hat jemand den sshd-Hostschlüssel neu generiert oder ersetzt?
  • Hat sich die IP-Adresse von myserver geändert, sodass ein anderer Host auf diese IP-Adresse antwortet?

Frage: ... und wie behebe ich das?

Entfernen Sie, wie andere bereits geantwortet haben, den zwischengespeicherten ECDSA-Hostschlüssel für den von Ihrem Konto zwischengespeicherten MyServer.


2
Guter Rat, aber beantwortet die Frage nicht wirklich. Versucht nicht einmal, die Frage zu beantworten.
Boatcoder

1

Dieser Fehler hat mich lange geärgert. Aus irgendeinem Grund machte es einen Unterschied, ob ich a tun würde

ssh host

oder

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

dann wies mich auf die Möglichkeit hin, die Konfigurationsdatei zu ändern. Siehe meinen Skript https://askubuntu.com/a/949731/129227 es für den Prozess zu automatisieren.


1
Wenn Sie Konfigurationswerte verwenden CanonicalizeHostnameund CanonicalDomainskeine strengen Überprüfungen vornehmen, würde ssh dafür sorgen, dass host und host.domain identisch sind.
BlakBat

0

Ich habe dies auf einem Chromebook durch Deinstallieren und erneutes Installieren von Secure Shell behoben ... Es hat wie ein Zauber funktioniert.


Das ist übertrieben. Eine einfachere Lösung finden Sie in meiner Antwort hier.
Alex Yursha

0

So entfernen Sie einen bekannten Host-Fingerabdruck (aus einer known_hostsDatei) unter Chrome OS:

Suchen Sie den Index des betreffenden Hosteintrags in der ssh-Ausgabe, wenn die Verbindung fehlschlägt. Zum Beispiel ist in der Zeile unter dem beleidigenden Index 7 :

Offending ECDSA key in /.ssh/known_hosts:7

Öffnen Sie die JavaScript-Konsole ( CTRL+ Shift+ J) des Secure Shell-Fensters und geben Sie Folgendes ein. Ersetzen Sie dies INDEXdurch den entsprechenden Wert (z. B. 7 ):

term_.command.removeKnownHostByIndex(INDEX);

Diese Lösung wurde von Leo Gaggls Blog ausgeliehen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.