Existe-t-il un moyen simple de mettre à jour les informations dans known_hosts lorsque vous savez qu'une clé d'hôtes a été modifiée?

38

Si le système d'exploitation d'un hôte a été réinstallé et que sa clé publique a été régénérée, l'enregistrement sur ce dernier échouera, car la nouvelle clé ne correspond pas à l'ancienne.

Existe-t-il un moyen plus simple de dire à ssh que vous savez que la clé de l'hôte a changé et que vous souhaitez la mettre à jour. Je pense que l'utilisation d'un éditeur de texte ou d'un logiciel similaire à sed pour supprimer la ligne incriminée est un peu sujette aux erreurs.

Sam
la source
Ceci duplique une question sur le superutilisateur . Voir les informations plus détaillées ici.
Yitz

Réponses:

59

Utilisez ssh-keygen -R hostnamepour supprimer le nom d'hôte de votre fichier known_hosts. Lors de votre prochaine connexion, la nouvelle clé d'hôte sera ajoutée à votre fichier known_hosts.

jsbillings
la source
12
TARGET_HOST=[hostname or IP]

# Remove the old key(s) from known_hosts
ssh-keygen -R $TARGET_HOST

# Add the new key(s) to known_hosts (and also hash the hostname/address)
ssh-keyscan -H $TARGET_HOST >> ~/.ssh/known_hosts

La prochaine fois que vous vous connecterez, vous vous connecterez sans qu'on vous le demande, Are you sure you want to continue connecting (yes/no)?car les clés seront déjà dans le known_hostsfichier.

Earl Ruby
la source
1
voir aussi le StrictHostKeyChecking dans ~ / .ssh / config
Jeff Schaller
2
J'utiliserais un nom de variable différent ... HOST se trouve dans certains shell en donnant votre propre nom d'hôte, je préférerais donc ne pas le modifier (je sais que l'on peut simplement quitter, ou le faire depuis un sous-shell, mais , pourquoi pas, thehostou autre chose, une variable ALLCAPS pourrait entrer en collision avec un nom interne réservé, mais pas les noms de petite casse.)
Olivier Dulac
Ces clés dans known_hosts sont préfixées par des éléments commençant par | 1 |. Ce truc n'est pas ajouté au fichier via cette méthode, ou est-ce que je me trompe? quelle est la différence, car ce que ssh-keyscan renvoie ne commence pas par | 1 |
Daniel F
1
(@ Danielf +) si vous utilisez le format haché et accepté la clé (s) sshil y a des entrées distinctes pour le nom d'hôte et son adresse (s), vous devriez donc ssh-keygen -R chacun d'entre eux pour éviter les conflits
dave_thompson_085