Deux options - la première, comme vous l'avez dit dans votre propre réponse, consiste à définir la variable d'environnement ANSIBLE_HOST_KEY_CHECKING
sur False.
La deuxième façon de le définir est de le placer dans un fichier ansible.cfg, et c'est une option très utile car vous pouvez soit définir cela globalement (au niveau du système ou de l'utilisateur, dans /etc/ansible/ansible.cfg
ou ~/.ansible.cfg
), soit dans un fichier de configuration dans le même répertoire en tant que playbook que vous exécutez.
Pour ce faire, créez un ansible.cfg
fichier dans l'un de ces emplacements et incluez ceci:
[defaults]
host_key_checking = False
Vous pouvez également définir de nombreux autres paramètres par défaut utiles, comme s'il faut ou non rassembler des faits au début d'une lecture, fusionner les hachages déclarés à plusieurs endroits ou en remplacer un par un autre, etc. Il y a une grande liste d'options ici dans la documentation Ansible.
Edit: une note sur la sécurité.
La validation de la clé d'hôte SSH est une couche de sécurité significative pour les hôtes persistants - si vous vous connectez plusieurs fois à la même machine, il est utile d'accepter la clé d'hôte localement.
Pour les instances EC2 à plus longue durée de vie, il serait logique d'accepter la clé d'hôte avec une tâche exécutée une seule fois lors de la création initiale de l'instance:
- name: Write the new ec2 instance host key to known hosts
connection: local
shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
Il n'y a pas de valeur de sécurité pour vérifier les clés d'hôte sur les instances que vous mettez en place dynamiquement et supprimez juste après l'exécution du playbook, mais il y a une valeur de sécurité dans la vérification des clés d'hôte pour les machines persistantes. Vous devez donc gérer la vérification des clés d'hôte différemment par environnement logique.
- Laisser la vérification activée par défaut (dans
~/.ansible.cfg
)
- Désactivez la vérification des clés d'hôte dans le répertoire de travail pour les playbooks que vous exécutez sur des instances éphémères (
./ansible.cfg
parallèlement au playbook pour les tests unitaires contre les VM vagabondes, l'automatisation pour les instances ec2 de courte durée)
known_hosts
fichiers locaux pour que SSH et Ansible reconnaissent la machine. Ne pas le faire, notamment en désactivant la vérification des clés d'hôte, dégrade la sécurité de SSH à presque zéro et autorise les attaques MITM. De nombreuses machines considérées comme faisant partie d'un «réseau interne» sont en fait connectées à Internet, où une seule réponse DNS plus rapide vous permet de parler à l'attaquant plutôt qu'à votre cible.ssh-keyscan <ip list>
sur une machine de confiance (pour moi, c'est un hôte bastion / jump) dans le même réseau, et j'ai mis les résultats dansknown_hosts
Pour configurer cet hôte de confiance, AWS expose le clé hôte dans les journaux de démarrage de l'instance, donc la recherche de cette clé était une étape manuelle que je n'ai jamais supprimée si je faisais une recréation complète de mon environnement. Mais cet hôte n'avait généralement pas besoin d'être supprimé. Cela peut aider.J'ai trouvé la réponse, vous devez définir la variable d'environnement
ANSIBLE_HOST_KEY_CHECKING
surFalse
. Par exemple:la source
hâte à nikobelia
Pour ceux qui utilisent jenkins pour exécuter le livre de jeu, je viens d'ajouter à mon travail jenkins avant d'exécuter le livre de jeu ansible la variable d'environnement ANSIBLE_HOST_KEY_CHECKING = False Par exemple ceci:
la source
La modification
host_key_checking
defalse
tous les hôtes est une très mauvaise idée.La seule fois où vous voulez l'ignorer, c'est au «premier contact», que ces deux tâches accompliront:
Nous désactivons donc la vérification de la clé d'hôte uniquement si nous n'avons pas la clé d'hôte dans notre
known_hosts
fichier.la source
Vous pouvez le transmettre en tant qu'argument de ligne de commande lors de l'exécution du playbook:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
la source
Si vous ne souhaitez pas modifier
ansible.cfg
ou le,playbook.yml
vous pouvez simplement définir une variable d'environnement:la source
Ignorer la vérification est une mauvaise idée car cela vous rend vulnérable aux attaques de l'homme du milieu.
J'ai pris la liberté d'améliorer la réponse de nikobelia en n'ajoutant qu'une seule fois la clé de chaque machine et en définissant le statut ok / changé dans Ansible:
Cependant, Ansible commence à rassembler des faits avant l'exécution du script, ce qui nécessite une connexion SSH, nous devons donc désactiver cette tâche ou la déplacer manuellement vers plus tard:
Un problème que je n'ai pas réussi à résoudre est qu'il marque tout comme modifié même s'il n'ajoute qu'une seule clé. Si quelqu'un pouvait apporter une solution, ce serait génial!
la source
Utilisez le paramètre nommé validate_certs pour ignorer la validation ssh
En faisant cela, il ignore le processus de validation ssh
la source
validate_certs
paramètre indique simplement à boto de ne pas valider le certificat HTTPS de l'API AWS. Cela n'affecte pas la vérification de la clé SSH.Je sais que la question a été répondue et qu'elle est correcte aussi, mais je voulais juste lier le document ansible où il est expliqué clairement quand et pourquoi la vérification respective devrait être ajoutée: vérification de la clé de l'hôte
la source
La plupart des problèmes apparaissent lorsque vous souhaitez ajouter un nouvel hôte à l'inventaire dynamique (via le module add_host) dans le playbook. Je ne veux pas désactiver de manière permanente la vérification de l'hôte d'empreintes digitales, donc des solutions telles que la désactivation dans un fichier de configuration globale ne me conviennent pas. Exporter var comme
ANSIBLE_HOST_KEY_CHECKING
avant d'exécuter playbook est une autre chose à faire avant de l'exécuter et dont il faut se souvenir.Il est préférable d'ajouter le fichier de configuration local dans le même répertoire que celui du playbook. Créez le fichier nommé
ansible.cfg
et collez le texte suivant:Inutile de vous rappeler d'ajouter quelque chose dans les variables d'environnement ou d'ajouter des
ansible-playbook
options. Il est facile de mettre ce fichier dans un repo git ansible.la source