l'identification de l'hôte distant ssh a changé

619

J'ai réinstallé mon serveur et je reçois ces messages:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

J'ai essayé différentes solutions que j'ai trouvées sur Internet. Mon known_hostsfichier (normalement en ~/.ssh/known_hosts) est en /var/lib/sss/pubconf/known_hosts. J'ai essayé de le modifier, mais il reste dans un état. J'ai installé ipa-client et j'ai Fedora 19. Comment puis-je résoudre cet avertissement?

Jusqu'à présent, toutes les réponses ne fonctionnent que si vous n'avez pas installé Freeipa.

La bonne réponse pour freeipa dans les commentaires ci-dessous d'Adrin est ici .

Filip Dobrovolný
la source
1
vient de découvrir à la dure que ce problème peut également se produire si vous avez un conflit d'adresse IP nslookup votre ip pour déboguer ce problème plus
sharrajesh
1
Il y a une impasse ici. Celui-ci est marqué en double afin que personne ne puisse ajouter de réponse et celui qu'il relie est marqué hors sujet afin que personne ne puisse y ajouter de réponse également. Si vous supprimez les known_hosts, cela résoudra également le problème.
zar
1
J'ai eu le même problème. Pour le mien et pour les autres, voici la question et ma réponse: superuser.com/questions/1071204/…
adrin
3
En tant que personne cherchant à vérifier d'abord sa clé, j'ai trouvé cette réponse utile. askubuntu.com/a/83499/620623
Declan McKenna
Comme le mentionne sharrajesh: vérifiez vos entrées DNS (dans FreeIPA pour moi) et voyez que vous n'avez pas plusieurs entrées A avec des IP qui ne sont pas accessibles depuis le réseau.
th3penguinwhisperer

Réponses:

1071

Voici la solution la plus simple

ssh-keygen -R <host>

Par exemple,

ssh-keygen -R 192.168.3.10

Depuis la ssh-keygenpage de manuel :

  • -R hostnameSupprime toutes les clés appartenant au nom d'hôte d'un fichier known_hosts. Cette option est utile pour supprimer les hôtes hachés (voir l'option -H ci-dessus).
Kashif Nazar
la source
Je suis sous Windows et cette solution, ni supprimer la clé, ne fonctionne pas, que puis-je essayer d'autre?
jaycode
5
D'accord, sur Windows, j'ai besoin d'utiliser le terminal de git bash pour cela (ou tout terminal MingW32). Rusé.
jaycode
25
gardez à l'esprit que si vous vous connectez via un port spécifique, vous devrez peut-être supprimer avec une syntaxe comme ssh-keygen -R [127.0.0.1]:3022. Vérifiez simplement dans votre fichier .ssh / known_hosts ce qu'il dit explicitement.
Adam Johns
4
Quand j'essaye ceci j'obtiens l'erreur "<hostname> introuvable dans ~ / .ssh / known_hosts"
Nodeocrat
3
Pourquoi cet avertissement se produit-il?
Vilas Joshi
199

Utilisation

ssh-keygen -R [hostname]

Exemple avec une adresse IP / nom d'hôte serait:

ssh-keygen -R 168.9.9.2

Cela mettra à jour l'infraction de votre hôte à partir des hôtes connus. Vous pouvez également fournir le chemin des hôtes connus avec l'indicateur -f.

ravi ranjan
la source
1
Suppression de la clé correspondante $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe
5
Comment une réponse sans explication obtient-elle tant de votes positifs? Pas de problèmes de sécurité, pas d'explication .... -1
Daniel W.
4
Cela ressemble également à une copie de l'autre réponse ci-dessous. S'il vous plaît un mod nettoyer ce gâchis ...
Daniel W.
115

J'ai eu cette même erreur après avoir recréé une image Digital Ocean Ubuntu. J'ai utilisé la commande suivante avec l'adresse IP de mon serveur à la place de[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]
Ben
la source
Merci beaucoup! J'utilisais le nom d'hôte et cela ne fonctionnait qu'avec l'IP_ADDRESS :)
J. Lopes
1
Cela l'a fait pour moi et devrait être la réponse acceptée. Je ne sais pas pourquoi il y a deux copies de cette réponse qui sont venues plus tard et les deux ont plus de votes positifs.
Wylliam Judd
La vôtre n'était pas la même erreur; votre serveur n'exécutait pas SSSD. Voir l'OP.
Mercury00
39

Lorsque vous réinstallez le serveur, son identité change et vous commencerez à recevoir ce message. Ssh n'a aucun moyen de savoir si vous avez changé le serveur auquel il se connecte, ou si un serveur intermédiaire a été ajouté à votre réseau pour flairer toutes vos communications - il le porte donc à votre attention.

Supprimez simplement la clé des hôtes connus en supprimant l'entrée appropriée:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

C'est 4dà cause deOffending RSA ...known_hosts:4

mockinterface
la source
1
Merci, mais je ne sais pas pourquoi, mais je le retire et il est à nouveau dedans. J'ai essayé d'arrêter le service sssd et cet effet a disparu, mais après avoir démarré sssd, il apparaît à nouveau.
Filip Dobrovolný
Sauvegardez votre répertoire ~ / .ssh, puis supprimez-le. Votre service continue-t-il de rajouter les clés après que ~ / .ssh a été emporté?
mockinterface
J'ai renommé .ssh en .ssh_old, après une nouvelle tentative de connexion, créez simplement un répertoire vide .ssh. Et je ne peux toujours pas rendre / var / lib / sss / pubconf / known_hosts "modifiable".
Filip Dobrovolný
4
La façon la plus portable de le faire: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz
2
Comment sauvegardez-vous le serveur identificationdans le cas où vous souhaitez reconstruire le serveur sans provoquer de perturbations comme ce message d'erreur?
Ninjaxor
38

Le marteau est de supprimer tous les hôtes connus d'un seul coup:

rm ~/.ssh/known_hosts

Je me heurte à cela car nous utilisons de petits sous-réseaux de serveurs de courte durée à partir d'un boîtier de connexion et avons fréquemment la réutilisation des adresses IP internes des serveurs qui partagent la même clé ssh.

Andy Hayden
la source
A travaillé pour moi sur une VM vagabonde lorsque la réponse acceptée n'a pas fonctionné.
100pic
1
Outil utile à avoir dans la ceinture, mais cela pourrait vous ouvrir à une attaque MitM (la chose exacte qui known_hostsest censée empêcher). Ne faites cela que si vous êtes sûr que tous les hôtes sont en sécurité.
Freedom_Ben
26

Le problème est que vous avez déjà accepté une connexion SSH à un ordinateur distant et que l'empreinte numérique de l'ordinateur distant ou la clé de hachage SHA256 a changé depuis votre dernière connexion. Ainsi, lorsque vous essayez à nouveau de SSH ou utilisez github pour extraire du code, qui utilise également SSH, vous obtenez une erreur. Pourquoi? Parce que vous utilisez la même adresse d'ordinateur distant qu'avant mais que l'ordinateur distant répond avec une empreinte digitale différente. Par conséquent, il est possible que quelqu'un usurpe l'ordinateur auquel vous vous êtes déjà connecté. Il s'agit d'un problème de sécurité.

Si vous êtes sûr à 100% que l'ordinateur distant n'est pas compromis, piraté, usurpé, etc., tout ce que vous devez faire est de supprimer l'entrée dans votre fichier connu_hosts pour l'ordinateur distant. Cela résoudra le problème car il n'y aura plus d'incompatibilité avec les identifiants d'empreintes digitales SHA256 lors de la connexion.

Sur Mac, voici ce que j'ai fait:

1) Trouvez la ligne de sortie qui lit RSA host key for servername:port has changed and you have requested strict checking. Vous aurez besoin à la fois du nom de serveur et éventuellement du port de cette sortie de journal.

2) Sauvegardez le fichier des hôtes connus SSH cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Trouvez la ligne où l'ancienne empreinte digitale de l'ordinateur est stockée et supprimez-la. Vous pouvez rechercher l'empreinte digitale de l'ordinateur distant incriminé en utilisant le nom de serveur et le port de l'étape 1.nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X pour quitter et choisissez Y pour enregistrer les modifications

Tapez maintenant ssh -p port servername et vous recevrez l'invite d'origine que vous avez faite lorsque vous avez essayé SSH pour la première fois sur cet ordinateur. Vous aurez alors la possibilité d'enregistrer l'empreinte SHA256 mise à jour de cet ordinateur distant dans votre fichier known_hosts. Si vous utilisez SSH sur le port 22, l'argument -p n'est pas nécessaire.

Tous les problèmes que vous pouvez restaurer le fichier d'origine connu_hosts: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts

anon58192932
la source
3
Cela devrait être marqué comme réponse acceptée. Suivre ces étapes a résolu mon problème alors que ssh-keygen -R [IP_ADDRESS]cela ne fonctionnait pas pour moi. Merci!
Yusuf Kamil AK
Ouais, un de ces cas qui n'est pas juste, meilleure réponse à coup sûr. Les 2e et 3e réponses répètent simplement ce que la 1ère a dit, et toutes ont une solution incomplète.
brasofilo
16

Comme beaucoup l’ont déjà dit, utiliser ssh-keygen, c’est-à-dire

ssh-keygen -R pong

En outre, vous pouvez envisager de désactiver temporairement la vérification des clés d'hôte:

ssh -oStrictHostKeyChecking=no root@pong
Stephen Quan
la source
ce que j'utilise pour le .ssh / config : Host ???? CheckHostIP no StrictHostKeyChecking no(3 lignes, tabulées à partir du 2)
XXL
15

Travaille pour moi!

Erreur: clé RSA incriminée dans / var / lib / sss / pubconf / known_hosts: 4

Cela indique que vous avez une clé RSA incriminée à la ligne no. 4

Solution 1 :

1. vi /var/lib/sss/pubconf/known_hosts

2 remove line no: 4 ..

3 Save and Exit, and Retry ..

Solution 2:

ssh-keygen -R "you server hostname or ip"

OU

Solution 3:

sed -i '4d' /root/.ssh/known_hosts

Cela supprimera la 4thligne de /root/.ssh/known_hostsen place ( -i).

Sahil Gulati
la source
1
Cela fonctionne pour le fichier .ssh connu_hosts de root. Pas pour / var / lib / sss / pubconf / known_hosts, qui est un fichier géré par SSSD et rempli par un serveur distant.
Mercury00
1
sur mon cas, pour une raison quelconque, le problème est survenu sur known_hosts * 2 *. Suivre ces étapes m'a aidé à le découvrir, merci @Sahil Gulati!
Lucas
11

J'ai utilisé la solution de mockinterface, bien que le sed -i ne fonctionnait pas tout à fait, je l'ai résolu en supprimant la ligne à la main avec vim:

sudo vim /var/lib/sss/pubconf/known_hosts

Vous pouvez utiliser n'importe quel autre éditeur de texte que vous souhaitez, mais vous devrez probablement montrer vos privilèges administratifs

3nrique0
la source
1
Oui, supprimer l'enregistrement de la même IP dans le fichier known_hosts résoudra le problème.
L'entrée est instantanément recréée par SSSD lors d'une nouvelle tentative de ssh. notez que sss pubconf known_hosts est un fichier géré, pas un référentiel local rempli par le serveur local.
Mercury00
9

Pour les utilisateurs Mac, vous pouvez utiliser l' -Rindicateur de la ssh-keygencommande. Exemple rapide:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSétant l'adresse IP dans laquelle vous essayez de ssh. Et puis vous pouvez bien vous connecter.

Nick Rameau
la source
8

En effet, les paramètres de votre ordinateur distant ont changé. Retirez vos clés actuelles pour cela.

vim /root/.ssh/known_hosts

Supprimez la ligne de l'IP que vous connectez.

miota85
la source
7

Modifiez /home/hostname /.ssh/known_hostset supprimez les 4 lignes, puis enregistrez-le.

Ensuite, exécutez à ssh root@pongnouveau, vous verrez un message comme ceci Are you sure you want to continue connecting (yes/no)? yes:, imprimez simplement yes.

Remarque: Si vous avez un problème, lisez d'abord les conseils, cela vous aidera.

Bruce
la source
Meilleure réponse qui explique réellement ce qui se passe.
Prométhée
6

Les autres réponses ici sont bonnes et fonctionnent, de toute façon, j'ai résolu le problème en supprimant ~/.ssh/known_hosts. Cela résout certainement le problème, mais ce n'est probablement pas la meilleure approche.

tjespe
la source
6

Dans mon cas, cela s'est produit parce que j'avais précédemment une connexion ssh avec une machine avec la même IP (disons 192.152.51.10) et que le système envisageait la clé RSA (stockée dans /home/user_name/.ssh/known_hosts) de l'hôte précédent, ce qui a entraîné en décalage.

Pour résoudre ce problème, vous devez supprimer la clé RSA précédemment stockée pour l'ip 192.152.51.10 .

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10
Prateek Joshi
la source
5

Solution simple doublure, testée sur mac:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

Supprime uniquement l'IP hôte ssh cible des hôtes connus.

où 212.156.48.110 est remplacé par l'adresse IP de l'hôte cible.

Cause : cela s'est produit car l'adresse IP cible était déjà connue pour une autre machine en raison de la redirection de port. La suppression de l'adresse IP cible avant la connexion résoudra le problème.

Helton Malambane
la source
4

Utilisez cette commande:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts
Muktesh Kumar
la source
Veuillez ajouter une explication sur ce que la commande fait et ce qu'elle ne fait pas.
Daniel W.
6
Pourquoi voudriez-vous tronquer le fichier? Vous perdez toutes les informations, même celles que vous avez déjà vérifiées. Il s'agit d'une mauvaise méthode pour agir contre une seule clé d'hôte publique modifiée.
Daniel W.
1
c'est un hack total: D mais ça marche: D
Benjamin
Astuce: cela supprime également toutes les autres informations sur l'hôte. Si vous exécutez des scripts automatisés à partir de votre machine (comme les déploiements), ils peuvent se casser car vous devez reconfirmer manuellement toutes les clés d'hôte. Juste pour donner un avertissement aux autres utilisateurs ici qui souhaitent utiliser la solution la plus simple.
Mateng
3

Supprimez cette entrée des hôtes connus en utilisant:

ssh-keygen -R *ip_address_or_hostname*

Cela supprimera l'adresse IP ou le nom d'hôte problématique des hôtes connus fichier et réessayera de se connecter.

Depuis les pages de manuel:

-R hostname
Supprime toutes les clés appartenant au nom d'hôte d'un fichier known_hosts. Cette option est utile pour supprimer les hôtes hachés (voir l'option -H ci-dessus).

Chaminda Bandara
la source
3

Faites juste:

cd /home/user/.ssh/-> voici uservotre nom d'utilisateur, c'est à dire/home/jon/ par exemple.

alors

gedit known_hosts & et supprimez le contenu qu'il contient.

Maintenant , sshencore une fois, cela devrait fonctionner.

Le prédateur
la source
3

Si vous essayez de vous connecter au conteneur Docker en cours d'exécution sur le port 2222 avec la commande et que vous obtenez l'erreur

mian@tdowrick2~$ ssh pos@localhost -p 2222

Ensuite, pour résoudre ce problème, sur votre ordinateur local (c'est-à-dire la machine hôte et non le conteneur), accédez à cd ~/.ssh/et ouvrez le known_hostsfichier avec l'éditeur de texte. Supprimez la ligne commençant par [localhost]:2222et enregistrez le fichier. Maintenant, essayez à nouveau de ssh

mian@tdowrick2~$ ssh pos@localhost -p 2222

L'erreur disparaîtra mais vous devrez le faire à chaque redémarrage du conteneur.

Mian Asbat Ahmad
la source
2

Ma solution est:

  1. vi ~/.ssh/known_hosts
  2. supprimez la ligne qui contient votre IP connectée.

C'est mieux que de supprimer tous les known_hosts

avion
la source
C'est la même réponse que miota85 ci-dessous.
Daniel W.
2

Seul problème côté client (clé en double pour ip):

Résoudre des variantes:

Pour effacer une adresse IP (port par défaut 22):

ssh-keygen -f -R 7.7.7.7

Pour une adresse IP ( port non par défaut ):

ssh-keygen -f -R 7.7.7.7:333

Effacement rapide de toutes les ips:

cd ~; rm .ssh/known_hosts

7.7.7.7 - SSH votre serveur IP Connect

333 - port non standard

Fortran
la source
2

Parfois, si pour une raison quelconque, vous devez réinstaller un serveur, lors de la connexion par ssh, nous constaterons que votre serveur indique que l'identification a changé. Si nous savons que ce n'est pas une attaque , mais que nous avons rétabli le système, nous pouvons supprimer l'ancienne identification des hôtes connus en utilisant ssh-keygen:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

Lors de la nouvelle connexion, nous vous demanderons de valider la nouvelle empreinte digitale:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes
BrennQuin
la source
1

J'ai eu ce problème, et la raison est très simple, j'ai une adresse IP en double pour la connexion ssh, donc après avoir modifié ce problème, tout est résolu.

Ventilateur
la source
1

J'ai eu la même erreur dans ma machine, et j'ai effacé le known_hostsfichier, et après cela, cela fonctionne bien.

GoingMyWay
la source
1
Vous ne voulez pas supprimer votre authorized_keyslorsque vous avez un problème avec le known_hostsfichier
jeb
0

SOLUTION:

1- supprimer de "$ HOME / .ssh / known_hosts" la ligne faisant référence à l'hôte vers lequel il est impossible de se connecter.

2- Exécutez cette commande: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (remplacez "IP_ADDRESSorHOSTNAME" par votre IP de destination ou votre nom d'hôte de destination)

3- Réessayer la connexion ssh (en cas d'échec, veuillez vérifier l'autorisation sur le répertoire .ssh, il doit s'agir de 700)

Ciels sombres
la source
0

Ma solution sur UBUNTU (linux):

1.Vous devez supprimer le contenu du fichier "known_hosts" qui se trouve dans "/home/YOUR_USERNAME/.ssh/known_hosts"

2.Générez une nouvelle clé ssh comme "ssh-keygen -t rsa -C" [email protected] "-b 4096"

3.Copiez-collez votre nouvelle clé ssh dans votre référentiel git (gitlab dans mon cas) clés SSH.

Ça marche pour moi !

Dionis Oros
la source
-1

AWS EC2.

Trouvez l'ip dans le message qu'il vous donne.

courir

vim /home/ec2-user/.ssh/known_hosts

Utilisez les touches fléchées pour trouver l'ip dans le message et cliquez sur.

dd

Cela supprimera cette ligne puis exécutera échapper

:wp

Cela vous fera économiser alors vous êtes prêt à partir.

user1503606
la source