web-dev-qa-db-fra.com

Comment supprimer correctement une ancienne clé ssh

J'ai un script qui crée dynamiquement des instances Amazon EC2 et ajoute leur clé ssh à mes ~/.ssh/known_hosts. Cependant, chaque fois que j'ai besoin de rafraîchir l'instance en la terminant et en la recréant, j'obtiens des messages d'avertissement désagréables comme:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 ECDSA key sent by the remote Host is
<fingerprint>.
Please contact your system administrator.
Add correct Host key in ~/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in ~/.ssh/known_hosts:94
  remove with: ssh-keygen -f "~/.ssh/known_hosts" -R <hostname>
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.

L'avertissement est compréhensible, mais même si j'exécute cette commande pour supprimer l'ancienne clé, la connexion me donne toujours l'avertissement:

Warning: Permanently added '<hostname>' (ECDSA) to the list of known hosts.
Warning: the ECDSA Host key for '<hostname>' differs from the key for the IP address '<ip>'
Offending key for IP in ~/.ssh/known_hosts:96

La solution consiste à supprimer manuellement cette ligne dans mon known_hosts, mais existe-t-il un moyen d'automatiser cela en exécutant au préalable une seule commande?

28
Cerin

De man ssh-keygen (SSH-KEYGEN (1))

 -R hostname
         Removes all keys belonging to hostname from a known_hosts file.  This option is useful to
         delete hashed hosts (see the -H option above).

Essaye ça:

ssh-keygen -R hostname [-f known_hosts_file]

54
alexus