Comment réparer l'avertissement concernant la clé d'hôte ECDSA


288

J'essaie d'installer SSH sans mot de passe sur un serveur Ubuntu avec ssh-copy-id myuser@myserver, mais je reçois le message d'erreur:

Attention: la clé d'hôte ECDSA pour 'myserver' diffère de la clé pour l'adresse IP '192.168.1.123'

Qu'est-ce qui cause cela et comment puis-je le réparer? J'ai essayé de supprimer le .sshrépertoire sur la machine distante et de l'exécuter ssh-keygen -R "myserver"localement, mais cela ne résout pas l'erreur.


dans mon cas, je change la liaison serveur (ip) avec le domaine, puis le The ECDSA host key for server has changed. Mon moyen est de supprimer la chaîne de cache associée à propos du domaine dans ~/.ssh/known_hosts. Ensuite, le SSH fonctionne.
Ninja

Réponses:


417

Supprimez la clé en cache pour 192.168.1.123sur la machine locale:

ssh-keygen -R 192.168.1.123

14
N'a pas fonctionné pour moi sur le serveur Debian nouvellement installé au travail lorsque SSH est arrivé de chez moi. En outre, la réponse est plutôt laconique.
Chris K

/home/wf/.ssh/known_hosts mis à jour. Contenu d'origine conservé en tant que /home/wf/.ssh/known_hosts.old "Avertissement: la clé d'hôte ECDSA a été ajoutée de manière permanente à l'adresse IP 'xxxx' dans la liste des hôtes connus." est affiché. et puis cela semble fonctionner
Wolfgang Fahl

13
Vous pouvez mettre à jour la clé au lieu de la supprimer. Utilisez ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hostsensuite, vous n'avez pas besoin de vérifier la nouvelle clé lors de la première connexion à l'hôte.
Alex

2
Pour qui ne réussit pas à le faire fonctionner: j'ai eu plusieurs occurrences enregistrées de la même adresse IP: 1 / ladite adresse IP (xx.xx.xx.xx), domaine (tomsihap.fr), serveur vps fourni par le fournisseur adresse (vpsxxx.ovh.net). ssh-keygen -R pour chacun de ceux-ci a fait le travail.
tomsihap

A travaillé pour moi, mais la confusion pourrait être de quel hôte devrait cette commande être exécutée? La réponse provient de celui qui a affiché l'erreur. La deuxième question et la réponse sont plus évidentes, mais juste au cas où: quelle adresse transmettre à ssh-keygen -R? L'adresse qui figure dans la déclaration d'erreur.
Russ Bateman

63

Dans mon cas ssh-keygen -R ..., l'avertissement n'a pas été corrigé. J'ai eu des informations supplémentaires comme celle-ci:

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

J'ai simplement modifié ~/.ssh/known_hostset supprimé manuellement la ligne 8 ("clé incriminée"). J'ai essayé de me reconnecter, l'hôte a été ajouté en permanence et tout allait bien après!


2
Fonctionne comme un charme. Peut résoudre ce problème en une ligne sed -e '8d' /home/myuser/.ssh/known_hosts, en remplaçant le numéro de ligne 8et le nom du fichier par ceux affichés sur votre système.
Alex P. Miller

Mon problème avec cette approche était qu'il est un peu déroutant si le known_hosts:8fait référence à une valeur indexée à zéro ou non. Il est bon de savoir qu'il s'agit d'une cartographie 1: 1 ...
Daniel F

J'ai remarqué que cela se produit si vous utilisez un port non standard tel que 2022. Dans ce cas, vous devez le fairessh-keygen -R [hostname]:2022
Alexander Malfait

Si je supprime ~/.ssh/known_hosts, je reçois le message que l'authenticité ne peut pas être établie et "Êtes-vous sûr de vouloir continuer à vous connecter". Répondre "oui" tente et échoue à se connecter. Si j'essaie de me connecter une deuxième fois, j'obtiens la même erreur de clé d'hôte ECDSA que celle avec laquelle j'ai commencé.
Aaron Franke

19

Je fais beaucoup de ssh-ing entre mes ordinateurs du réseau local et mes deux comptes d’hébergement Web, donc j’ai réglé toutes sortes de problèmes avec SSH, y compris des problèmes d’authentification, qui ssh -vpermettaient de voir où et quels étaient les problèmes.

Ayant juste résolu ce problème et n'étant pas satisfait des réponses, je voulais vraiment savoir "pourquoi" moi-même ...

Le déclencheur de mon cas est le suivant: le nouveau système d'exploitation du serveur installé au travail et lors de l'installation du paquet openssh-server, un nouveau jeu de clés d'hôte a été généré sur le serveur du travail. Auparavant, tous les systèmes d'exploitation de mon serveur étaient Ubuntu et cette fois, Debian a été remplacé (et je suppose qu'il existe une différence nuancée d'autorisations).

Lorsque tous les systèmes d'exploitation étaient Ubuntu et que je réinstalle le système d'exploitation d'un serveur, dès le premier SSH, je reçois ce type d'avertissement, que je préfère par rapport à l'avertissement silencieux ci-dessus!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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.

Ensuite, je m'ouvre ~/.ssh/known_hostssur l'ordinateur à l'origine du SSH, supprime cette ligne, me reconnecte et ceci se produit:

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

Ce bit à propos de: 11122 est le numéro de port sur lequel je route SSH depuis le pare-feu

J'ai vérifié les sauvegardes d'un ancien serveur Ubuntu et comparé à ma nouvelle installation Debian:

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

Donc, oui, probablement, l'hôte a commencé à utiliser des clés ecdsa récemment, ce qui, selon les modifications apportées par Ubuntu récemment, serait à l'origine d'une mise à jour. Ubuntu s’est éloigné du système d’exploitation Linux sur lequel j’avais compté, c’est pourquoi j’ai installé Debian cette fois-ci.

J'ai lu le fichier security.SE q / a sur ecdsa et j'ai déjà retiré cette ligne de sshd_configmon nouveau serveur Debian. (et couru service ssh restart)


2
+1 pour le joli bloc de comparaison côte à côte. Pourriez-vous ajouter une URL clarifiant "le renoncement d'Ubuntu au système d'exploitation Linux ultra-solide"?
bgoodr

@bgoodr c'est mon opinion et uniquement basée sur la configuration de mon propre serveur de fichiers RAID plusieurs fois au cours des dernières années. : / Merde pour la réponse, mais commencez à googler ubuntu debian serveret vous verrez ce que je veux dire.
Chris K

1
@ChrisK Vous êtes un chef, monsieur. Merci pour la réponse détaillée mais concise.
Sargas

6

L'invite se produit à chaque fois car les adresses IP changent tout le temps lors de l'utilisation d'un adressage dynamique. Essayez d’utiliser une adresse IP statique afin de ne devoir ajouter la clé qu’une seule fois.


1
Bon point, est-ce que quelqu'un m'a parlé d'ips dynamiques?
Chris K

6

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

Cela devrait remplacer les clés existantes sous known_hosts.old et en créer une nouvelle. Cette solution a fonctionné pour moi dans le même scénario


3

J'ai ajouté les lignes suivantes à mon ~ / .ssh / config, désactivant ainsi la vérification stricte de l'hôte pour toutes les adresses .local. (avec l'allocation d'adresse DHCP, les adresses ip de mes machines locales changent constamment)

host *.local
    StrictHostKeyChecking no

Vous recevez toujours l'avertissement, ce qui me convient parfaitement.


2

Utilisez-vous le même utilisateur pour vous connecter?

Si vous êtes connecté à un PC local tel que l'utilisateur John et connecté au serveur B tel que l'utilisateur Adolf @ B et que tout va bien, cela ne signifie pas que tout va bien si vous êtes connecté à un PC local tel que l'utilisateur Jane et que vous vous connectez au serveur. B comme utilisateur Adolf @ B .

Si vous souhaitez vous connecter au serveur B en tant qu'utilisateur Beda du PC A sans mot de passe, essayez cette commande, le tout à partir du PC A :

ssh-keygen -t rsa

Cette commande génère la clé et la stocke dans le fichier. S'il vous plaît laissez la phrase secrète vide.

ssh Beda@B mkdir -p .ssh

Cette commande crée le répertoire, s'ils n'existent pas déjà. Sinon, n'imprimez pas de message d'erreur.

cd ~/.ssh

Cette commande modifie le répertoire dans le répertoire de base de votre utilisateur ./ssh.

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

Cette commande affiche le fichier id_rsa.pub (votre clé publique) dans authorized_keys sur le serveur.

IMPORTANT: Beda est votre nom d'utilisateur sur le serveur auquel vous vous connectez, B est l'adresse IP de votre serveur.

Maintenant, vous pouvez vous connecter au serveur B sans mot de passe ou phrase secrète:

ssh Beda@B

1
Ou utilisez simplement ssh-copy-id pour renseigner un fichier allowed_keys avec votre clé id_rsa.pub sans les tracas supplémentaires.
BlakBat

1

Le fil ici peut aider.

En gros, vous voulez supprimer les clés RSA et ECDSA de cet hôte, puis les utiliser ssh-keyscanpour les replacer dans votre known_hostsfichier de manière à ne pas causer ce conflit. Cela a fonctionné pour moi quand j'ai eu le même problème.


1

Question: Qu'est-ce qui cause ça, ...?

La clé d’hôte du serveur ssh a donc changé. Quelle est la cause du changement? C'est dur à dire. Voici quelques hypothèses:

  • Est-ce que sshd sur myserver a commencé à utiliser des clés ECDSA, donc c'est un nouveau type de clé?
  • Myserver a-t-il été réinstallé récemment?
  • Sshd a-t-il été réinséré récemment sur myserver afin qu'une nouvelle clé d'hôte ssh soit générée?
  • Quelqu'un a-t-il généré ou remplacé la clé d'hôte sshd?
  • L'adresse IP de myserver a-t-elle changé pour qu'un autre hôte réponde à cette adresse IP?

Question: ... et comment puis-je résoudre ce problème?

Comme d’autres ont déjà répondu, supprimez la clé d’hôte ECDSA mise en cache pour myserver que votre compte a mis en cache.


2
Bon conseil, mais ne répond pas vraiment à la question. N'essaye même pas de répondre à la question.
boatcoder

1

Cette erreur m'a longtemps ennuyé. Pour une raison quelconque, cela ferait une différence si je ferais un

ssh host

ou

ssh host.domain

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

m'a ensuite indiqué l'option de modifier le fichier de configuration. Voir mon script https://askubuntu.com/a/949731/129227 pour l'automatisation du processus.


1
L' utilisation de valeurs de configuration CanonicalizeHostnameet CanonicalDomainséviterait la suppression et la vérification stricte rendrait ssh hôte et envisager host.domain être même.
BlakBat

0

J'ai corrigé ce problème sur un Chromebook en désinstallant et en réinstallant Secure Shell ... Cela fonctionnait à merveille.


C'est exagéré. Voir une solution plus simple dans ma réponse ici.
Alex Yursha

0

Voici comment supprimer une empreinte digitale d'hôte connue (d'un known_hostsfichier) sur un système d'exploitation Chrome:

Recherchez l'index de l'entrée de l'hôte incriminé dans la sortie ssh en cas d'échec de la connexion. Par exemple, dans la ligne ci-dessous, l'index incriminé est 7 :

Offending ECDSA key in /.ssh/known_hosts:7

Ouvrez la console JavaScript ( CTRL+ Shift+ J) de la fenêtre Secure Shell et tapez ce qui suit en remplaçant INDEXpar la valeur appropriée (par exemple 7 ):

term_.command.removeKnownHostByIndex(INDEX);

Cette solution a été empruntée au blog de Leo Gaggl .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.