2012-05-05 19:05:56 +0000 2012-05-05 19:05:56 +0000
315
315

Wie behebe ich die Warnung über den ECDSA-Hostschlüssel

Ich versuche, kennwortloses SSH auf einem Ubuntu-Server mit ssh-copy-id myuser@myserver einzurichten, aber ich erhalte die Fehlermeldung:

Warnung: der ECDSA-Hostschlüssel für ‘myserver’ unterscheidet sich von dem Schlüssel für die IP-Adresse ‘192.168.1.123’

Was verursacht das und wie behebe ich es? Ich habe versucht, das Verzeichnis .ssh auf dem entfernten Rechner zu löschen und ssh-keygen -R "myserver" lokal auszuführen, aber das löst den Fehler nicht.

回答 (13)

459
459
459
2012-05-05 20:20:21 +0000

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

ssh-keygen -R 192.168.1.123
69
69
69
2014-03-11 18:52:18 +0000

In meinem Fall hat ssh-keygen -R ... 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 einfach ~/.ssh/known_hosts manuell bearbeitet und Zeile 8 (die “anstößige Taste”) gelöscht. Ich versuchte, die Verbindung wieder herzustellen, der Host wurde permanent hinzugefügt, und danach war alles in Ordnung!

19
19
19
2014-01-16 08:12:11 +0000

Ich mache viel Ssh-ing zwischen meinen LAN-Computern und meinen beiden Webhosting-Accounts, also habe ich alle möglichen Probleme mit SSH gelöst, einschließlich Authentifizierungsproblemen mit ssh -v, um zu sehen, wo und was schief gelaufen ist.

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

Der Auslöser für meinen Fall ist: ich habe ein neues Server-Betriebssystem auf der Arbeit installiert, und bei der Installation des openssh-server-Pakets wurde ein neuer Satz Hostschlüssel auf dem Server der Arbeit generiert. Zuvor waren alle meine Serverbetriebssysteme Ubuntu und dieses Mal wechselte es zu Debian (und ich vermute, dass es einen nuancierten Unterschied bei den Berechtigungen gibt).

Als alle Betriebssysteme Ubuntu waren und ich ein Serverbetriebssystem neu installiere, erhalte ich beim ersten SSH-In daraufhin 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_hosts auf dem Rechner, der das ssh initiiert, lösche diese Zeile, verbinde mich neu 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 Bit über :11122 ist die Portnummer, von der aus ich SSH auf der Firewall leite

Ich überprüfte Sicherungen von einem früheren Ubuntu-Server und diff’d gegen meine neue Debian-Installation:

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 vor kurzem begonnen, ecdsa-Schlüssel zu verwenden, was ich aufgrund der Änderungen von Ubuntu in letzter Zeit auf ein Update schieben würde. Die Abkehr von Ubuntu von dem grundsoliden Linux-Betriebssystem, auf das ich gezählt habe, ist der Grund, warum ich diesmal Debian installiert habe:

Ich las ein security.SE q/a auf ecdsa und habe diese Zeile bereits von sshd_config meinem neuen Debian-Server entfernt. (und lief service ssh restart)

7
7
7
2014-01-16 09:06:57 +0000

Die Eingabeaufforderung erfolgt jedes Mal, da sich die IP-Adressen bei dynamischer Adressierung ständig ändern. Versuchen Sie, statische IP zu verwenden, damit Sie den Schlüssel nur einmal hinzufügen müssen.

6
6
6
2015-05-14 18:16:42 +0000

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 gleichen Szenario funktioniert

4
4
4
2018-03-15 12:23:28 +0000

Ich fügte die folgenden Zeilen zu meiner ~/.ssh/config hinzu und deaktivierte damit die strenge Host-Prüfung für alle .local-Adressen. (mit DHCP-Adresszuweisung ändern sich die IP-Adressen meiner lokalen Rechner ständig)

host *.local
    StrictHostKeyChecking no

Die Warnung erhalten Sie aber immer noch, was für mich in Ordnung ist.

2
2
2
2014-10-21 09:17:22 +0000

Wenn Sie auf einem lokalen PC wie Benutzer John angemeldet sind und mit dem Server verbunden sind B wie Benutzer Adolf@B und alles in Ordnung ist, bedeutet das nicht, daß alles in Ordnung ist, wenn Sie auf einem lokalen PC wie Benutzer Jane angemeldet sind und mit dem Server verbunden sind B wie Benutzer Adolf@B.

Wenn Sie sich auf Server B als Benutzer Beda von PC A ohne Passwort einloggen wollen, versuchen Sie diesen Befehl, alle von PC A:

ssh-keygen -t rsa

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

ssh Beda@B mkdir -p .ssh

Dieser Befehl erzeugt das Verzeichnis, falls sie noch nicht existieren. Andernfalls geben Sie keine Fehlermeldung aus.

cd ~/.ssh

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

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

Dieser Befehl gibt die Datei id_rsa aus. pub (Ihr öffentlicher Schlüssel) in autorisierte_keys auf dem Server aus.

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

Jetzt können Sie sich ohne Passwort oder Passphrase mit dem Server B verbinden:

ssh Beda@B
1
1
1
2012-08-07 15:42:41 +0000

Frage: Was verursacht das, …?

Also hat sich der Hostschlüssel des ssh-Servers geändert.  Was verursachte die Änderung?  Es ist schwer zu sagen.  Hier sind einige Vermutungen:

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

Frage: … und wie kann ich das beheben?

Wie andere bereits geantwortet haben, entfernen Sie den zwischengespeicherten ECDSA-Hostschlüssel für myserver, den Ihr Account zwischengespeichert hat.

1
1
1
2012-12-20 16:47:41 +0000

Der Thread hier könnte helfen.

Im Wesentlichen wollen Sie sowohl den RSA- als auch den ECDSA-Schlüssel für diesen Host entfernen und sie dann mit ssh-keyscan wieder in Ihre known_hosts-Datei einfügen, und zwar so, dass dieser Konflikt nicht entsteht. Das hat bei mir funktioniert, als ich das gleiche Problem hatte.

1
1
1
2017-08-25 12:43:26 +0000

Dieser Fehler hat mich lange Zeit geärgert. Aus irgendeinem Grund machte es einen Unterschied, ob ich ein

ssh host

oder

ssh host.domain

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

machte, und wies mich dann auf die Möglichkeit hin, die Konfigurationsdatei zu ändern. Siehe mein Skript https://askubuntu.com/a/949731/129227 dort, um den Prozess zu automatisieren.

0
0
0
2015-05-18 23:26:58 +0000

Ich habe dies auf einem Chromebook durch Deinstallation und Neuinstallation von Secure Shell behoben… Es funktionierte wie ein Zauber.

0
0
0
2020-02-23 01:54:19 +0000

Bei mir geschieht dies aufgrund eines Fehlers, den ich als ssh-Fehler neuerer (OpenSSH_7.9p1 und höher) Clients betrachte, wenn versucht wird, einen sichereren ecdsa-Serverschlüssel zu lernen, wenn bereits ein älterer rsa-Typschlüssel bekannt ist. Er präsentiert dann diese irreführende Meldung!

Ich kenne keine gute Lösung dafür, die einzige Abhilfe, die ich gefunden habe, ist, alle “guten, aber alten rsa-Schlüssel” zu entfernen, so dass der Client die “neuen sichereren ecdsa-Schlüssel” neu lernen kann. Also:

  1. Der erste Schritt besteht darin, alle guten alten RSA-Schlüssel zu entfernen ( Warnung! Dadurch verliert der Client den Schutz gegen MitM ):

  2. Der zweite Schritt besteht dann darin, alle Host-Schlüssel neu einzulernen, was manuell durch erneutes Verbinden mit jeder IP unter Verwendung von ssh geschehen muss.


Hier ist, was ich beobachte:

$ sftp test@136.243.197.100
Connected to test@136.243.197.100
sftp> 

$ sftp test@valentin.hilbig.de
Connected to test@valentin.hilbig.de.
sftp>

Versuchen Sie nun, sich mit einem neu eingeführten Alias dieses gleichen bereits bekannten guten Servers zu verbinden:

$ sftp test@gcopy.net
Warning: the ECDSA host key for 'gcopy.net' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:44
Are you sure you want to continue connecting (yes/no)?

Bitte schauen Sie sich die IP-Adresse an. Es ist die gleiche IP wie oben! Es sieht also so aus, als würde sich der (gute) Schlüssel der (bekannten) IP plötzlich selbst beleidigen (das ist er nicht, da der Client ssh zwei inkompatible Schlüssel mischt, siehe unten).

Jetzt versuchen wir, das zu beheben:

$ ssh-keygen -R 136.243.197.100
# Host 136.243.197.100 found: line 45
/home/test/.ssh/known_hosts updated.
Original contents retained as /home/test/.ssh/known_hosts.old

Versuchen wir es noch einmal:

$ sftp test@gcopy.net
Warning: Permanently added the ECDSA host key for IP address '136.243.197.100' to the list of known hosts.
Connected to test@gcopy.net.

$ sftp test@valentin.hilbig.de
Warning: the RSA host key for 'valentin.hilbig.de' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:10
Are you sure you want to continue connecting (yes/no)?

WTF? Was ist hier passiert? Der neue frische Schlüssel, der vom Server gelernt wurde, schlägt wieder fehl? Und das Problem hat sogar die Seiten gewechselt?!?

Nein, es ist weder der Schlüssel noch der Server. Alles ist korrekt!

Es ist der Client ssh, der den korrekten Schlüssel nicht verifiziert! Der Eintrag 45 in known_hosts trägt nun einen Schlüssel vom Typ ecdsa-sha2-nistp256, während der Schlüssel, den der Client vom Server gezogen hat, vom Typ rsa-sha2-512 ist (und daher nicht mit dem anderen Schlüssel übereinstimmen kann!).

$ sftp -v test@valentin.hilbig.de

zeigt:

debug1: kex: host key algorithm: rsa-sha2-512

, während

$ sftp -v test@gcopy.net

zeigt:

debug1: kex: host key algorithm: ecdsa-sha2-nistp256

Anscheinend hat der Client ssh irgendwo einen Fehler! Er kann nicht mit einem Host-Schlüssel umgehen, der in mehr als einer Variante existiert! Oder er tappt in die Falle, eine veraltete Variante eines Schlüssels anzufordern.

How to fix?

Ich habe wirklich keine Ahnung. Das lässt sich wahrscheinlich nur stromaufwärts beheben.

Aber es gibt eine manuelle, aber ungeschickte Abhilfe:

Sie müssen alle Spuren des alten Schlüssels vom Typ rsa manuell entfernen. Der fragliche Schlüssel wird in der Ausgabe angezeigt, aber er ist nicht direkt als das Problem gekennzeichnet:

Warning: the RSA host key for 'valentin.hilbig.de' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:10

check:

awk 'NR==45 { print $2 }' /home/test/.ssh/known_hosts
awk 'NR==10 { print $2 }' /home/test/.ssh/known_hosts

ergibt

ecdsa-sha2-nistp256
ssh-rsa

Hier ist also der übereinstimmende Host-Schlüssel der anstößige, und der anstößige Schlüssel ist der richtige, den es zu behalten gilt! Entfernen wir also den falschen (passenden):

ssh-keygen -R valentin.hilbig.de
# Host valentin.hilbig.de found: line 10
/home/test/.ssh/known_hosts updated.
Original contents retained as /home/test/.ssh/known_hosts.old

Nun prüfen Sie noch einmal:

$ sftp test@valentin.hilbig.de
The authenticity of host 'valentin.hilbig.de (136.243.197.100)' can't be established.
ECDSA key fingerprint is SHA256:tf7lwe10C2p1lK2UG9p//m/4sUBCpX+i9k5Ub63c6Os.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'valentin.hilbig.de' (ECDSA) to the list of known hosts.
Connected to test@valentin.hilbig.de.
sftp> 

$ sftp test@gcopy.net
Connected to test@gcopy.net.
sftp> 

sftp test@136.243.197.100
Connected to test@136.243.197.100.
sftp>

JA! Problem endlich weg. Aber mit mehreren 100 Einträgen in .ssh/known_hosts wird diese “Lösung” wirklich zu einem großen PITA (und zu einem fehleranfälligen Sicherheitsalptraum in der Elm Street. YMMV.)

0
0
0
2017-07-24 07:55:39 +0000

So entfernen Sie einen bekannten Host-Fingerabdruck (aus der Datei known_hosts) auf einem Chrome-Betriebssystem:

Suchen Sie den Index des anstößigen Host-Eintrags in der ssh-Ausgabe, wenn die Verbindung fehlschlägt. In der Zeile darunter lautet der beanstandete Index beispielsweise 7 :

Offending ECDSA key in /.ssh/known_hosts:7

Öffnen Sie die JavaScript-Konsole (STRG+Umschalt+J) des Secure Shell-Fensters und geben Sie Folgendes ein, wobei INDEX durch den entsprechenden Wert (z.B. 7 ) ersetzt wird:

term_.command.removeKnownHostByIndex(INDEX);

Diese Lösung wurde von Leo Gaggl’s Blog entliehen.