42 votes

Comment éditer known_hosts lorsque plusieurs hôtes partagent la même adresse IP et le même nom DNS?

Je me connecte régulièrement en ssh sur un ordinateur qui est un ordinateur dual-boot OS X / Linux. Les deux instances OS ne partagent pas la même clé hôte, donc ils peuvent être vus comme deux hôtes partageant la même IP et DNS. Disons que l'IP est 192.168.0.9, et les noms sont hostname et hostname.domainname

D'après ce que j'ai compris, la solution pour pouvoir se connecter aux deux hôtes est de les ajouter tous les deux dans le fichier ~/.ssh/know_hosts. Cependant, c'est plus facile à dire qu'à faire, car le fichier est hashé, et a probablement plusieurs entrées par hôte (192.168.0.9, hostname, hostname.domainname). Par conséquent, j'ai le message d'avertissement suivant

Avertissement : la clé hôte ECDSA pour 'hostname' est différente de la clé pour l'adresse IP '192.168.0.9'

Y a-t-il un moyen facile d'éditer le fichier known_hosts, tout en gardant les hachages. Par exemple, comment puis-je trouver les lignes correspondant à un nom d'hôte donné? Comment puis-je générer les hachages pour certains hôtes connus?

La solution idéale me permettrait de me connecter de manière transparente à cet ordinateur avec ssh, peu importe que je l'appelle 192.168.0.9, hostname ou hostname.domainname, ni si elle utilise sa clé hôte Linux ou sa clé hôte OS X. Cependant, je veux quand même recevoir un avertissement s'il y a une véritable attaque de l'homme du milieu, c'est-à-dire si une autre clé que celles-ci est utilisée.

2voto

Mike Points 192

Je ne rencontre pas ce problème lorsque je me connecte à différentes boîtes VPS partageant la même adresse IP car chacune a un port SSH différent (20022, 30022, etc) donc elles sont enregistrées en tant qu'hôtes connus avec des clés différentes.

Est-ce que cela pourrait être une solution de contournement pour vous?

1voto

Jim Points 11

Étant donné que vous souhaitez conserver la vérification stricte de la clé d'hôte, je leur ferais utiliser différents fichiers known_hosts. Pour ce faire, configurez votre fichier ~/.ssh/config (ou le fichier /etc/ssh/ssh_config si vous avez besoin que cela fonctionne sur plusieurs comptes d'utilisateurs locaux) de la manière suivante :

Host myserver.osx
  UserKnownHostsFile ~/.ssh/known_hosts.dual.osx
  # par défaut : ~/.ssh/known_hosts
  Hostname $REALHOSTNAME

Host myserver.linux
  UserKnownHostsFile ~/.ssh/known_hosts.dual.linux
  Hostname $REALHOSTNAME

, en remplaçant $REALHOSTNAME par le nom d'hôte ou l'adresse IP réels, bien sûr. (Peu importe ce que vous choisissez, tant que vous choisissez quelque chose après "Hostname" qui résoudrait l'adresse IP, mais je préfère utiliser le nom d'hôte plutôt qu'une adresse IP, simplement par principe.)

Ensuite, les commandes ssh myserver.linux et ssh myserver.osx peuvent ainsi avoir des clés d'hôte différentes, mais vous obtenez toujours la vérification. Si c'est Linux qui est actif et que vous tapez OS X (ou vice versa), vous obtiendrez l'avertissement (ce qui, je pense, est l'effet désiré).

Si j'avais ce problème, je m'assurerais qu'il y a quelque chose de complètement erroné dans le fichier known_hosts principal qui ne correspond à aucun des deux, de manière à ce que si vous tapez $REALHOSTNAME au lieu de myserver.osx, vous obtenez l'avertissement. :-) Je ferais cela en mettant quelque chose comme

 $REALHOSTNAME

dans mon fichier /etc/hosts, puis en exécutant un ssh $REALHOSTNAME et en acceptant la nouvelle clé, puis en retirant cette entrée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X