Comment supprimer la vérification de clé RSA stricte dans SSH et quel est le problème ici?

42

J'ai un serveur Linux qui chaque fois que je me connecte me montre le message qui a changé la clé d'hôte SSH:

$ ssh root @ host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @ AVERTISSEMENT: L'IDENTIFICATION DE L'HÔTE À DISTANCE A CHANGÉ! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ IL EST POSSIBLE QUE QUELQU'UN FAIT QUELQUE CHOSE DE MAUVAIS! Quelqu'un pourrait t'écouter en ce moment (attaque de l'homme du milieu)! Il est également possible que la clé d’hôte RSA ait été modifiée. L'empreinte de la clé RSA envoyée par l'hôte distant est 93: a2: 1b: 1c: 5f: 3e: 68: 47: bf: 79: 56: 52: f0: ec: 03: 6b. Veuillez contacter votre administrateur système. Ajoutez la clé d’hôte correcte dans /home/emerson/.ssh/known_hosts pour vous débarrasser de ce message. Clé fautive dans /home/emerson/.ssh/known_hosts:377

La clé d’hôte RSA pour hôte1 a changé et vous avez demandé une vérification stricte. La vérification de la clé de l'hôte a échoué.

Il me garde connecté pendant quelques secondes, puis ferme la connexion.

host1: ~ / .ssh # Lecture depuis l'hôte distant host1: Connexion réinitialisée par un homologue Connexion à l'hôte1 fermée.

Est-ce que quelqu'un sait ce qui se passe et ce que je pourrais faire pour résoudre ce problème?

setatakahashi
la source
1
Cette précédente question dupes: serverfault.com/questions/2988/…
Drew Stephens

Réponses:

68

S'il vous plaît, ne supprimez pas l'intégralité du fichier known_hosts tel que recommandé par certaines personnes, cela annule totalement le sens de l'avertissement. C'est une fonction de sécurité qui vous avertit qu'une attaque au centre pourrait avoir eu lieu.

Je vous suggère d'identifier la raison pour laquelle quelque chose a changé, probablement une mise à niveau SSH a modifié les clés de cryptage en raison d'une éventuelle faille de sécurité. Vous pouvez ensuite purger cette ligne spécifique de votre fichier known_hosts:

sed -i 377d ~/.ssh/known_hosts

Cette d eletes ligne 377 comme indiqué après les deux points dans l'avertissement:

/home/emerson/.ssh/known_hosts:377

Vous pouvez également supprimer la clé appropriée en procédant comme suit:

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

Veuillez NE PAS purger l'intégralité du fichier et assurez-vous qu'il s'agit bien de la machine à laquelle vous souhaitez vous connecter avant de purger la clé spécifique.

Adam Gibbins
la source
Ne pas supprimer plus de 350 serveurs en raison d'une incompatibilité de clé. Une idée pourquoi il continue à fermer la connexion?
setatakahashi
N’est-il pas résolu une fois que vous avez supprimé l’enregistrement abouti_connu pertinent? Sinon, pourriez-vous exécuter le client ssh en mode commenté et le coller quelque part.
Adam Gibbins
1
Il ferme la machine car la clé d’hôte n’est pas valide, exactement comme elle le dit. Si vous êtes sérieux au sujet de la sécurité, vous devez contacter l'administrateur du serveur pour vous assurer que la clé de l'hôte a changé pour une raison légitime. Si c'est le cas, vous pouvez le remplacer, comme l'a expliqué Adam.
Matthew Flaschen
J'ai suivi votre suggestion mais $ sed -i "46 d" ~ / .ssh / known_hosts sed: 1: "/Users/myusr/.ssh ...": caractères supplémentaires à la fin de la commande, je l'ai donc supprimé manuellement avec Vim et cela a fonctionné. Merci!
Luis Ramirez-Monterosa
3
La syntaxe d'Adam est presque correcte, mais vous avez besoin d'un espace entre le "377" et le "d". De plus, sous OS X, les hôtes connus se trouvent dans ~ / .ssh / known_hosts; notez l'absence d'un "." dans le nom du fichier.
ktappe
27

Je pense que bien que certaines des réponses ici traitent du plan d'action recommandé dans la question du PO, cela ne répond pas complètement à la question.

La question dit "Comment supprimer la vérification de clé RSA stricte dans SSH et quel est le problème ici?"

Le problème ici est, comme l'ont conseillé d'autres personnes, un changement d'hôte probablement dû à la réinstallation du serveur (scénario le plus courant). Et la solution recommandée consiste en effet à supprimer la clé incriminée du fichier .ssh / allowed_keys avec un fichier sed intégré.

Cependant, je n'ai vu aucune réponse à la partie spécifique de la question " Comment supprimer la vérification de clé RSA stricte dans SSH ".

Vous pouvez supprimer la vérification StrictHostKey dans votre fichier de configuration ssh, généralement stocké dans ~/.ssh/config.

Un exemple de bloc d'hôte est fourni ci-dessous:

Host 101
  HostName yourip|hostname
  User youruserid
  IdentityFile /path/to/keyfile
  Port 22
  StrictHostKeyChecking no

La ligne spécifiquement ajoutée est la dernière StrictHostKeyChecking noqui fait exactement quoi. En fonction de votre scénario spécifique, cela peut vous être utile, par exemple exécuter plusieurs conteneurs virtualisés sur un serveur dédié sur quelques ips, arrêter et démarrer une autre instance sur la même adresse IP.

Joel G Mathew
la source
3
+1 Parce que cette publication aborde réellement la partie de vérification stricte du message d'erreur.
Shibumi
1
+1 de moi aussi pour répondre au contenu de la question. Selon les facteurs, il peut y avoir plus à faire. Cette approche dégrade la vérification de l'hôte de "strict" à "certains" (ma terminologie). Dans ma situation, ssh a reçu l'autorisation de m'empêcher de me connecter, car je voulais me connecter en entrant un mot de passe, ce qui a été désactivé par "une" vérification de l'hôte. Vous devez donc continuer et demander à ssh d'utiliser / dev / null en tant que "UserKnownHostsFile". Ceci active la vérification d’hôte sur «aucune» et les avertissements DIRE susmentionnés s’appliquent. Ne le faites pas de manière globale ou permanente.
homme de l'espace cardiff
C'est vraiment une solution élégante. Merci d'avoir partagé!
LeOn - Han Li
10

Un autre moyen de supprimer StrictHostKeyChecking, lorsque vous ne devez le faire que pour un seul serveur:

ssh <server> -o StrictHostKeyChecking=no
Greg Dougherty
la source
Vous permettra de vous connecter mais ne réglera pas le problème de façon permanente.
Andres Canella
Lorsque je le fais, cela me donne la possibilité d'ajouter la clé, ce qui résout ensuite le problème de manière permanente
Greg Dougherty
Peut-être avons-nous un problème différent? Je me connecte à un serveur qui avait une adresse IP différente auparavant.
Andres Canella
Si vous avez un serveur dont les données ont changé, vous devez le supprimer de votre fichier hosts connu (après avoir établi que la modification est correcte) et ajouter ses nouvelles informations. Si vous avez un nouveau serveur, -o vous permettra de vous connecter au serveur et d’obtenir ses informations ajoutées.
Greg Dougherty le
Je pense que c'est en fait une bonne pratique de laisser StrictHostKeyChecking réglé sur YES dans votre configuration et de n'utiliser ce commutateur que si vous savez que vous vous connectez à un nouveau serveur ou que vous avez modifié vous-même les clés d'un ancien serveur.
Mohak
5

Tout d'abord, est-ce votre machine? Avez-vous sciemment changé les clés de l'hôte? Sinon, je serais très préoccupé par le fait que quelque chose a modifié ces données.

Deuxièmement, augmentez le débogage SSH,

ssh -vvv user@host

et voyez ce que cela vous dit, essayez également de regarder dans / var / log / secure et / var / log / messages sur le serveur auquel vous essayez de vous connecter pour obtenir des indices, sshd affiche de bons messages d'erreur.

Troisièmement, cette machine est-elle connectée à Internet? Devez-vous vraiment autoriser les connexions root?

Dave Cheney
la source
1
+1 pour le commentaire de connexion root
Fahad Sadah
Pour que cette erreur se produise, il suffit que la machine cible soit ré-imagée. Si vous vous connectez à une cible située de votre côté d'une zone démilitarisée, une attaque MitM est très improbable.
ktappe
3

Vous obtenez cela parce que quelque chose a changé (comme une nouvelle carte réseau, une nouvelle adresse IP, le changement de logiciel serveur, etc.). L'accent mis sur la sécurité contient un bel article sur la protection des clés d'hôte SSH .

Supprimez simplement la clé (avec SFTP ou similaire) du serveur en modifiant le $HOME/.ssh/known_hostsfichier et acceptez le nouveau lors de la prochaine connexion.

Votre connexion peut être interrompue à cause du paramètre StrictHostKeyChecking. Voir ce fil pour un problème similaire.


la source
2
Noooo, s'il te plaît, ne fais pas ça. Cela annule totalement toute la sécurité fournie par cette fonctionnalité. Veuillez ne supprimer que la clé spécifique qui a changé, pas tous les connus (connus).
Adam Gibbins
5
Je n'ai pas recommandé de supprimer le fichier known_hosts, j'ai recommandé de le modifier et d'en retirer la clé.
Ooop, désolé, mal interprété.
Adam Gibbins
2
Ce message ne peut certainement pas être déclenché par une nouvelle adresse IP, encore moins par une nouvelle carte réseau. Voir la réponse correcte d'Adam Gibbins.
bortzmeyer
1
Avant de voter contre (je trouve les gens très heureux avec cela), faites vos recherches. Lisez cet article Security Focus, securityfocus.com/infocus/1806 . J'en cite un peu: "Pourquoi une clé d'hôte peut-elle changer? La machine à laquelle vous souhaitez vous connecter a été déplacée vers un nom DNS ou une adresse IP différent, ou a été entièrement remplacée par une nouvelle." Si une réponse est horriblement incorrecte, veuillez laisser une chance pour une correction. Après tout, c'est un wiki.
3

En tant qu'hôte [au sens large du terme, il peut s'agir de tout, d'une réinstallation / démarrage multiple à un tout autre ordinateur avec une adresse IP à laquelle vous vous êtes connecté auparavant], le client ssh semble avoir changé, cela vous donne la Erreur.

Il n'est pas nécessaire de désactiver la vérification stricte, pas plus que la suppression en bloc des clés enregistrées.

Il est tout à fait possible d'avoir deux clés différentes répertoriées dans known_hosts pour un nom d'hôte ou une adresse IP particulier; vous donnant 2 alternatives selon que vous pensez avoir besoin ou non de la 'vieille' clé actuellement stockée dans known_hosts

Supprimez soit la clé particulière à laquelle il fait référence, en l377 de known_hosts pour le PO, soit conservez les deux.

Le moyen le plus simple de conserver les deux, en évitant la suppression de clés dans known_hosts, est

  1. Modifiez le fichier known_hosts pour ajouter # au début de la 'vieille' entrée référencée temporairement dans le fichier known_hosts [@ l377].
  2. Connectez-vous [ssh à l'hôte], acceptez l'invite pour ajouter la nouvelle clé 'automatiquement'
  3. Ensuite, éditez à nouveau le serveur known_hosts pour supprimer le #.

plus de réponses dans "Ajouter la clé d’hôte correcte dans known_hosts" / plusieurs clés d’hôte ssh par nom d’hôte?

marque
la source
Je n'avais pas entendu parler du tour des deux clés. Ce comportement n'est pas documenté, n'est-ce pas?
hackerb9