Comment ignorer la vérification d'authenticité ansible SSH?
Existe-t-il un moyen d'ignorer la vérification d'authenticité SSH effectuée par Ansible? Par exemple, quand je viens de configurer un nouveau serveur, je dois répondre oui à cette question:
GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?
Je sais que c'est généralement une mauvaise idée mais je l'incorpore dans un script qui crée d'abord un nouveau serveur virtuel chez mon fournisseur de cloud, puis appelle automatiquement mon playbook Ansible pour le configurer. Je veux éviter toute intervention humaine au milieu de l'exécution du script.
3 réponses
Deux options - la première, comme vous l'avez dit dans votre propre réponse, définit la variable d'environnement ANSIBLE_HOST_KEY_CHECKING
sur False.
La deuxième façon de le définir est de le mettre dans un ansible.fichier cfg, et c'est une option vraiment utile car vous pouvez le définir globalement (au niveau du système ou de l'utilisateur, dans /etc/ansible/ansible.cfg
ou ~/.ansible.cfg
), ou dans un fichier de configuration dans le même répertoire que le playbook que vous exécutez.
Pour ce faire, créez un fichier ansible.cfg
dans l'un de ces emplacements, et incluez ceci:
[defaults]
host_key_checking = False
Vous pouvez définissez également beaucoup d'autres paramètres par défaut pratiques, comme si vous souhaitez ou non rassembler des faits au début d'une pièce, fusionner des hachages déclarés à plusieurs endroits ou les remplacer par un autre, etc. Il y a toute une grande liste d'options ici dans les documents 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 à la même machine plusieurs fois, il est utile d'accepter clé hôte localement.
Pour les instances EC2 de plus longue durée, il serait logique d'accepter la clé 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 levez 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 de la clé hôte différemment par Environnement logique.
- laisser la vérification activée par défaut (dans
~/.ansible.cfg
) - désactivez la vérification de la clé hôte dans le répertoire de travail des playbooks que vous exécutez sur des instances éphémères (
./ansible.cfg
à côté du playbook pour les tests unitaires sur les machines virtuelles vagrantes, l'automatisation pour les instances ec2 de courte durée)
, j'ai trouvé la réponse, vous devez définir la variable d'environnement ANSIBLE_HOST_KEY_CHECKING
à False
. Par exemple:
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...
Avant de nikobelia
Pour ceux qui utilisent jenkins pour exécuter le Play book, je viens d'ajouter à mon travail jenkins avant d'exécuter ansible-playbook la variable d'environnement he ANSIBLE_HOST_KEY_CHECKING = False Par exemple ceci:
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv