350 votes

Puis-je ajouter automatiquement un nouvel hôte à known_hosts ?

Voici ma situation : Je suis en train de mettre en place un harnais de test qui, à partir d'un client central, lancera un certain nombre d'instances de machines virtuelles, puis exécutera des commandes sur celles-ci par l'intermédiaire de ssh . Les machines virtuelles auront des noms d'hôtes et des adresses IP précédemment inutilisés, elles ne seront donc pas dans la liste des machines virtuelles. ~/.ssh/known_hosts sur le client central.

Le problème que j'ai, c'est que la première ssh exécutée contre une nouvelle instance virtuelle aboutit toujours à une invite interactive :

The authenticity of host '[hostname] ([IP address])' can't be established.
RSA key fingerprint is [key fingerprint].
Are you sure you want to continue connecting (yes/no)?

Existe-t-il un moyen de contourner ce problème et de faire en sorte que le nouvel hôte soit déjà connu de la machine cliente, peut-être en utilisant une clé publique qui est déjà intégrée dans l'image de la machine virtuelle ? J'aimerais vraiment éviter d'avoir à utiliser Expect ou autre pour répondre à l'invite interactive si je le peux.

9 votes

Pour un environnement de test autonome et physiquement sécurisé, l'acceptation automatique des clés peut fonctionner parfaitement. Mais l'acceptation automatique des clés publiques dans un environnement de production ou sur un réseau non sécurisé (tel qu'Internet) contourne complètement toute protection contre les attaques de type "man-in-the-middle" que SSH pourrait offrir. Le site sólo Le moyen le plus sûr de s'assurer que vous êtes protégé contre les attaques MITM est de vérifier la clé publique de l'hôte par un canal de confiance hors bande. Il n'y a pas de moyen sûr d'automatiser cela sans mettre en place une infrastructure de signature de clé modérément compliquée.

295voto

Alexandru Points 3999

IMO, la meilleure façon de procéder est la suivante :

ssh-keygen -R [hostname]
ssh-keygen -R [ip_address]
ssh-keygen -R [hostname],[ip_address]
ssh-keyscan -H [hostname],[ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts

Cela permet de s'assurer qu'il n'y a pas d'entrées en double, que vous êtes couvert à la fois pour le nom d'hôte et l'adresse IP, et de hacher la sortie, une mesure de sécurité supplémentaire.

203voto

David Points 344

Définissez le StrictHostKeyChecking option pour no soit dans le fichier de configuration, soit via -o :

ssh -o StrictHostKeyChecking=no username@hostname.com

138voto

Pour les paresseux :

ssh-keyscan -H <host> >> ~/.ssh/known_hosts

-H hache le nom d'hôte / l'adresse IP

45voto

ysawej Points 547

Comme nous l'avons mentionné, l'utilisation du key-scan serait le moyen le plus approprié et le plus discret de le faire.

ssh-keyscan -t rsa,dsa HOST 2>&1 | sort -u - ~/.ssh/known_hosts > ~/.ssh/tmp_hosts
mv ~/.ssh/tmp_hosts ~/.ssh/known_hosts

La procédure ci-dessus permet d'ajouter un hôte, UNIQUEMENT s'il n'a pas encore été ajouté. Cette méthode n'est pas non plus sûre du point de vue de la concurrence ; vous ne doit pas n'exécutez pas le snippet sur la même machine d'origine plus d'une fois en même temps, car le fichier tmp_hosts peut être bloqué, ce qui conduit finalement à un gonflement du fichier known_hosts...

21voto

Corey Points 504

Vous pourriez utiliser ssh-keyscan pour récupérer la clé publique et l'ajouter à votre fichier known_hosts fichier.

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