SSH-Verbindungsproblem mit dem Fehler "Überprüfung des Hostschlüssels fehlgeschlagen ..."


179

Ich kann über SSH eine Verbindung zu einem anderen Ubuntu-Rechner in meinem LAN herstellen. Auf beiden PCs habe ich openssh-server installiert, aber von einem anderen Ubuntu-Computer aus kann ich über SSH keine Verbindung zu meinem PC herstellen, und ich habe den folgenden Fehler erhalten:

Überprüfung des Hostschlüssels fehlgeschlagen ...


1
Verwenden Sie Hostnamen oder IP-Adressen?
Thorbjørn Ravn Andersen

Nicht ähnlich, aber ich habe den gleichen Fehler erhalten, jedoch aufgrund eines anderen Problems: serverfault.com/questions/494916/…
zengr

Dies ist kein Ubuntu-spezifisches Problem. Kann mit jedem sshvon der Kommandozeile passieren .
MarkHu

Antworten:


216

"Überprüfung des Hostschlüssels fehlgeschlagen" bedeutet, dass der Hostschlüssel des Remote-Hosts geändert wurde.

SSH speichert die Host-Schlüssel der Remote-Hosts in ~/.ssh/known_hosts. Sie können diese Textdatei entweder manuell bearbeiten und den alten Schlüssel entfernen (Sie können die Zeilennummer in der Fehlermeldung sehen) oder verwenden

ssh-keygen -R hostname

Aus der Manpage :

-R Hostname
Entfernt alle zum Hostnamen gehörenden Schlüssel aus einer Datei "known_hosts". Diese Option ist nützlich, um gehashte Hosts zu löschen.

(was ich aus der Antwort auf " Ist es möglich, einen bestimmten Hostschlüssel aus der Datei" known_hosts "von SSH zu entfernen? )


4
Dies kann auch bedeuten, dass Sie einfach nicht den Hostschlüssel des Remote-Hosts haben. Zum Beispiel, wenn ich rm ~/.ssh/*dann ssh -o BatchMode=yes root@somewhere, wenn nichts anderes falsch ist, werde ich Host key verification failed. nicht wichtig, wenn Sie immer interaktiv sind, aber relevant für Skripte, bei denen der gleiche Fehler auftritt.
Ron Burk

Kein Wunder, ssh-keygen -R example.net:7999ergibt Host example.net:7999 not found in known_hosts.
alex

Ich habe die known_hostsDatei und ssh wieder entfernt. Es funktionierte.
Paris am

Datei ~/.ssh/known_hostsist nicht lesbar
João Pimentel Ferreira

128

Wenn Sie in bestimmten Remote- / Skriptsituationen keinen interaktiven Zugriff auf den Prompt-to-Add-Hostkey haben, können Sie dies folgendermaßen umgehen:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

Warnung: 'something.example.com, 10.11.12.13' (RSA) wurde dauerhaft zur Liste der bekannten Hosts hinzugefügt.


6
+1, dies ist eine hässliche Lösung, aber in einigen Fällen automatisierter Überwachungsprozesse, die mit Geräten mit dymaic ip-Anschluss funktionieren, ist dies eine einfache und akzeptable Lösung.
Ninsuo

11
+1 Zum Beispiel ist dies für Jenkins Hinrichtungen eine gute Lösung. Vielen Dank
Lobo

5
@ Lobo kann nicht mehr zustimmen, ich benutze es für jenkins, die cool istsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd

Mein Leben gerettet. Lebensretter-Lösung.
user1735921

10

Manchmal gibt es auch Situationen, in denen Sie an der seriellen Konsole arbeiten. Wenn Sie den obigen Befehl im ausführlichen Modus überprüfen, -vwird angezeigt, /dev/ttydass er nicht vorhanden ist.

ssh -v user@hostname

In obigem Fall einfach entfernen /dev/ttyund einen Symlink von /dev/ttyS0zu erstellen /dev/tty.

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

Fügen Sie alternativ id_rsa.pubden Remote-Standort hinzu, damit kein Kennwort abgefragt wird und Sie einen Anmeldezugriff erhalten.


6
+1 für die Empfehlung, den Parameter -v zu verwenden; Dies kann beim Debuggen von SSH-Problemen sehr hilfreich sein.
Daniel Kullmann

8

In meinem Fall wurde dies durch ein udev-Problem verursacht - es gab keinen /dev/ttyGeräteknoten. Die Lösung für mich war nur:

sudo mknod -m 666 /dev/tty c 5 0

6

Am Terminal:

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

Die folgende oder eine ähnliche Meldung wird angezeigt:

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

Stellen Sie dann wie gewohnt eine Verbindung zu Ihrem EC2 her:

ssh -i YourPublickey.pem user@example.com

Ich habe, command-line line 0: Bad yes/no/ask argument.weil Sie falsch 'Nein' anstelle von 'Nein' als Argument zu verwendenStrictHostKeyChecking
Axel Bregnsbo

3

Nun, einfach, weil das zweite Ubuntu die Verbindung über einen Schlüssel und nicht über ein Passwort erfordert.

Ich schlage vor, Sie verwenden sudo dpkg-reconfigure openssh-serverauf Ihrem PC, und dann sollte es richtig funktionieren. Es wird die Konfiguration für openssh zurückgesetzt und sollte zu einer Standard-Passwortauthentifizierung zurückkehren.

Die zweite Möglichkeit ist, dass sich auf Ihrem PC bereits ein Schlüssel für Ihr anderes Ubuntu befindet und dieser sich geändert hat und daher nicht mehr erkannt wird. In diesem Fall müssen Sie die Datei bearbeiten .ssh/authorized_keys, um die problematische Zeile zur Identifizierung Ihres Ubuntu zu entfernen.


3

Dies ist ein alter Thread und ich bin gerade auf diese Antwort gestoßen. Ich werde nur hinzufügen, was ich getan habe, um dies zu lösen.

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

Ich habe mir nur die Fehlermeldung angesehen, die es mir zuwarf, und es wurde gesagt, dass dieser Befehl ausgeführt werden soll, um ihn aus der Liste der Hosts zu entfernen. Danach habe ich folgendes gemacht:

ssh-copy-id HOSTNAME

Dann folgte ich den Anweisungen von dort, bis ich in der Lage war, in den Server zu sshen.


Als diesen Befehl bekomme ich als Vorschlag in Ubuntu 12.4.
MaNKuR,

2

Dies bedeutet, dass Ihr Remote-Host-Schlüssel geändert wurde (möglicherweise Änderung des Host-Passworts).

Ihr Terminal hat vorgeschlagen, diesen Befehl als Root-Benutzer auszuführen

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231

Sie müssen diesen Hostnamen aus der Hostliste auf Ihrem PC / Server entfernen. Kopieren Sie den vorgeschlagenen Befehl und führen Sie ihn als Root aus.

$ sudo su                                                            // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231   // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                               // Exist from root user

$ sudo ssh root@www.website.net -p 4231                              // Try again

Hoffe das klappt.


1

Sie sollten Ihren Schlüssel folgendermaßen ändern: Suchen Sie anhand des angegebenen Fehlers, welcher Host-Schlüssel geändert wurde. Beispiel: Beleidigender ECDSA-Schlüssel in /Users/user-name/.ssh/known_hosts:5. Der fünfte Schlüssel hat sich geändert.

sed -i '5d' ~/.ssh/known_hosts

Hinweis: Sie müssen als root angemeldet sein oder über die Berechtigung für sudo verfügen.


Nein, es sei denn, Sie tun dies für eine andere Person. Sie benötigen weder root noch sudo. Sie bearbeiten die Datei in Ihrem Home-Verzeichnis. Zweitens: Damit der Befehl funktioniert, ist GNU sed erforderlich.
Techraf

Vielleicht hast du recht, aber ich habe versucht, von Mac OSX auf Ubuntu-Server zu ssh und das muss ich tun. übrigens danke für deinen kommentar.
Amir.AG

1

Sie müssen den RSA-Schlüssel des Zielhosts in den Quellhost einfügen, /home/user/.ssh/known_hostsindem Sie diesen auf dem Ziel ausführen

ssh-keyscan -t rsa @targethost

1

Möglicherweise müssen Sie nur "yes" eingeben, wenn ssh bestätigt, dass Sie die Verbindung fortsetzen möchten.

Wie unten.

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

Dann geben Sie Ihr Passwort ein.

Bitte beachten Sie "Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (Ja / Nein)? Ja ". Sie müssen Ja eingeben, nicht eingeben.


1

Abgesehen von der strikten Deaktivierung der Hostschlüsselprüfung können Sie die Verbindung auch herstellen, indem Sie Folgendes eingeben:

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts und löschen Sie alle Zeilen, nachdem Sie die Verbindung wiederhergestellt haben, und Sie erhalten einen neuen Schlüssel.


6
Dies ist eine gefährliche Lösung, da Sie ALLE Ihre Host-Schlüssel entfernen. Die akzeptierte Lösung ssh-keygen -R hostnameist besser.
Msanford

0

Meine Lösung stammt aus diesem Blogbeitrag: Die Algorithmusaushandlung ist für den SSH Secure Shell-Client fehlgeschlagen

Sie müssen die Datei wie folgt ändern:

sudo nano /etc/ssh/sshd_config

Fügen Sie dann Folgendes hinzu:

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

Grundsätzlich haben Sie verschiedene Lösungen ausprobiert, bis Sie eine gefunden haben, die Ihr Problem lösen kann. Wenn die oben genannten Lösungen nicht funktionieren, versuchen Sie es bitte mit dieser. Wenn dies nicht so gut funktioniert, versuchen Sie es mit anderen.


0

Machen Sie einfach "sudo vi /var/root/.ssh/known_hosts" und entfernen Sie die Zeile, die einen Schlüssel für einen Host enthält, zu dem Sie eine Verbindung herstellen möchten, und stellen Sie die Verbindung erneut her.

Ich weiß nichts über Ihre besondere Situation, aber wahrscheinlich kam dieser Fehler mit einer Meldung wie der folgenden:

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

Wenn Sie das Protokoll genauer lesen, werden Sie feststellen, dass der Schlüssel, den Sie von einem Host erhalten haben, mit einem bereits vorhandenen Schlüssel in Konflikt steht. In diesem Fall befindet er sich in Zeile 74 der Datei known_hosts (Beleidigender ECDSA-Schlüssel in / var /). root / .ssh / known_hosts: 74). Entfernen Sie die Leitung von known_hosts, speichern Sie die Änderungen und stellen Sie die Verbindung wieder her.


-1
chmod 666 /dev/tty 

ist noch eine andere tty-Lösung - manchmal hat diese Gerätedatei falsche Berechtigungen.

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.