web-dev-qa-db-fra.com

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

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é de l'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 répertoire .ssh sur la machine distante et d'exécuter ssh-keygen -R "myserver" localement, mais cela ne résout pas l'erreur.

255
Cerin

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

ssh-keygen -R 192.168.1.123
373
grawity

Dans mon cas, ssh-keygen -R ... n'a pas corrigé l'avertissement. 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é manuellement ~/.ssh/known_hosts et supprimé la ligne 8 (la "clé incriminée"). J'ai essayé de me reconnecter, l'hôte a été ajouté en permanence et tout allait bien après!

54
aardvarkk

Je fais beaucoup de ssh-ing entre mes ordinateurs de 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, en utilisant ssh -v pour voir où et quels problèmes se sont produits.

Venant juste de résoudre 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: installé un nouveau système d'exploitation de serveur 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 de 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 dans les 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.

Puis j'ouvre ~/.ssh/known_hosts sur l’ordinateur qui lance ssh, supprimez cette ligne, reconnectez-vous 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é pour que j’ai installé Debian cette fois-ci.

J'ai lu un security.SE q/a sur ecdsa et j'ai déjà supprimé cette ligne de sshd_config mon nouveau serveur Debian. (et a couru service ssh restart)

17
Chris K

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

5
Jignesh Rawal

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.

4
Gaurav Joseph

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

Si vous êtes connecté à un PC local tel que l’utilisateur John et connecté au serveurBcomme l’utilisateur Adolf @ B et que tout est OK, cela ne signifie pas que tout est OK si vous êtes connecté au PC local en tant qu'utilisateur Jane et que vous vous connectez au serveurBen tant qu'utilisateur Adolf @ B .

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

ssh-keygen -t rsa

Cette commande génère la clé et la stocke dans le fichier. S'il vous plaît laissez mot de passe 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 change 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 imprime le fichier id_rsa.pub (votre clé publique) dans registered_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
2
Petr Derian

Le fil ici peut aider.

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

1
Paul A Jungwirth

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.

1
KimSJ

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 là pour automatiser le processus.

1
Wolfgang Fahl

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?
  • Est-ce que sshd sur myserver a récemment été ré-insallé et une nouvelle clé d’hôte ssh a été 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.

1
Lars Nordin

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

Recherchez l'index de l'entrée d'hôte en cause dans la sortie ssh en cas d'échec de la connexion. Par exemple, dans la ligne ci-dessous, l’indice 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 INDEX par la valeur appropriée (par exemple 7 ):

term_.command.removeKnownHostByIndex(INDEX);

Cette solution a été empruntée à Blog de Leo Gaggl .

0
Alex Yursha

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

0
msersen