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.

28voto

DaCheetah Points 381

Comme @Izzy l'a suggéré dans un commentaire ci-dessus, ssh vous indique la ligne en cause, et en la supprimant (en la sauvegardant ailleurs), en acceptant la nouvelle clé, puis en recopiant la ligne supprimée, vous vous retrouvez avec deux clés pour le même hôte, et ssh acceptera l'une ou l'autre.

(Vous pouvez également utiliser ssh-keygen -H -F pour trouver les lignes dans votre fichier known_hosts qui correspondent à ce nom d'hôte. Après avoir recopié la ligne supprimée, exécuter cette commande devrait afficher deux entrées.)

Si quelqu'un sait comment faire la même chose avec PuTTY, je serais très intéressé de le savoir.

17voto

jjlin Points 14572

La solution la plus simple ici est simplement d'utiliser les mêmes clés hôtes pour Linux et OS X. Autrement dit, choisissez un ensemble de fichiers /etc/ssh/ssh_host_*_key* et copiez-les sur l'autre OS. Ensuite, la même clé hôte sera présentée à un client SSH peu importe dans quel OS vous avez démarré, et le client SSH n'y verra que du feu.

16voto

Rhyuk Points 645

J'ai trouvé ceci qui pourrait vous aider à réaliser ce que vous voulez accomplir.

Source: https://stackoverflow.com/questions/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but

Créez un fichier de configuration dans votre répertoire .ssh comme suit :

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

Explication ci-dessous (provenant de la page de manuel ssh_config)

CheckHostIP

Si ce drapeau est défini sur "yes", ssh(1) vérifiera également l'adresse IP de l'hôte dans le fichier known_hosts. Cela permet à ssh de détecter si une clé d'hôte a changé en raison d'un détournement DNS. Si l'option est définie sur "no", le contrôle ne sera pas effectué. La valeur par défaut est "yes".

HostKeyAlias

Spécifie un alias qui doit être utilisé à la place du véritable nom d'hôte lors de la recherche ou de l'enregistrement de la clé d'hôte dans les fichiers de base de données de clés d'hôtes. Cette option est utile pour le tunneling des connexions SSH ou pour plusieurs serveurs s'exécutant sur un seul hôte.

Les lignes Username et Port évitent que vous ayez à donner ces options en ligne de commande, donc vous pouvez simplement utiliser :

% ssh server1
% ssh server2

2voto

afk Points 356

Un autre article, qui décrit plusieurs façons de gérer votre problème :

La deuxième méthode utilise deux paramètres openSSH : StrictHostKeyCheckin, et UserKnownHostsFile. Cette méthode trompe SSH en le configurant pour utiliser un fichier known_hosts vide, et NE pas vous demander de confirmer la clé d'identité du serveur distant.

2voto

Izzy Points 3527

La façon la plus simple de résoudre votre problème est de donner à chaque hôte une adresse IP propre/distincte. Avec 253 adresses disponibles dans votre réseau (privé) et IPv4, cela ne devrait pas poser de problème majeur. Donnez-leur des IPs fixes (comme un serveur DHCP identifierait la machine en fonction de l'adresse MAC de la carte réseau, et les deux recevraient la même adresse). Je ne vois pas d'autre solution si vous voulez conserver les mesures de sécurité (que je ne laisserais pas tomber pour ce petit "confort", non plus).

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