web-dev-qa-db-fra.com

Comment ignorer la vérification d'authenticité SSH ansible?

Existe-t-il un moyen d'ignorer la vérification d'authenticité SSH effectuée par Ansible? Par exemple, lorsque 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'intègre dans un script qui crée d'abord un nouveau serveur virtuel chez mon fournisseur de cloud, puis appelle automatiquement mon livret de jeu ansible pour le configurer. Je veux éviter toute intervention humaine au milieu de l'exécution du script.

112
Johan

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, ce qui est une option très utile car vous pouvez le définir globalement (au niveau système ou utilisateur, en /etc/ansible/ansible.cfg ou ~/.ansible.cfg), ou dans un fichier de configuration dans le répertoire. même répertoire que le playbook que vous utilisez.

Pour ce faire, créez un fichier ansible.cfg à l’un de ces emplacements et incluez ceci:

[defaults]
Host_key_checking = False

Vous pouvez également définir de nombreux autres paramètres utiles par défaut, comme par exemple rassembler ou non des faits au début d'un jeu, fusionner des hachages déclarés à plusieurs endroits ou les remplacer, etc. Il y a une très 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 hôtes persistants. Si vous vous connectez plusieurs fois au même ordinateur, il est utile d’accepter la clé de l’hôte localement. 

Pour les instances EC2 de longue durée, il serait logique d'accepter la clé de l'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 la vérification des clés d'hôte sur les instances que vous placez de manière dynamique et que vous supprimez immédiatement après l'exécution du livre de lecture, mais il existe une valeur de sécurité pour la vérification des clés d'hôte des machines persistantes. Vous devez donc gérer la vérification de la clé de l'hôte différemment selon l'environnement logique. 

  • Laisser la vérification activée par défaut (dans ~/.ansible.cfg)
  • Désactiver la vérification de la clé de l'hôte dans le répertoire de travail des playbooks que vous exécutez contre des instances éphémères (./ansible.cfg à côté du playbook pour les tests unitaires contre les VMs vagabondes, l'automatisation des instances ec2 de courte durée)
176
nikobelia

J'ai trouvé la réponse, vous devez définir la variable d'environnement ANSIBLE_Host_KEY_CHECKING sur False. Par exemple:

ANSIBLE_Host_KEY_CHECKING=False ansible-playbook ...
21
Johan

transmettre à nikobelia

Pour ceux qui utilisent jenkins pour exécuter le livre de jeu, je viens d'ajouter à mon travail jenkins avant d'exécuter l'ansible-playbook la variable d'environnement ANSIBLE_Host_KEY_CHECKING = False

export ANSIBLE_Host_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv
2
dsaydon

Vous pouvez le passer en tant qu'argument de ligne de commande lors de l'exécution du livre de lecture:

ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'

1
paresh patil

Utilisez le paramètre nommé validate_certs pour ignorer la validation ssh

- ec2_AMI:
    instance_id: i-0661fa8b45a7531a7
    wait: yes
    name: ansible
    validate_certs: false
    tags:
      Name: ansible
      Service: TestService

En faisant cela, il ignore le processus de validation ssh

0
Nitesh Jain

Changer Host_key_checking en false pour tous les hôtes est une très mauvaise idée.

La seule fois où vous voulez l'ignorer, c'est sur le "premier contact", ce que ces deux tâches accompliront:

- name: Check known_hosts for {{ inventory_hostname }}
  local_action: Shell ssh-keygen -F {{ inventory_hostname }}
  register: has_entry_in_known_hosts_file
  changed_when: false
  ignore_errors: yes
- name: Ignore Host key on first run
  when: has_entry_in_known_hosts_file == 1
  set_fact:
    ansible_ssh_common_args: '-o StrictHostKeyChecking=no'

Nous ne désactivons donc la vérification de la clé de l'hôte que si nous n'avons pas la clé de l'hôte dans notre fichier known_hosts.

0
davidolrik

Je sais que la question a été répondue et qu'elle est également correcte, mais je voulais simplement relier le document ansible où il est clairement expliqué quand et pourquoi le contrôle correspondant devrait être ajouté: Host-key-checking

0
justjais

Si vous ne souhaitez pas modifier ansible.cfg ou playbook.yml, vous pouvez simplement définir une variable d'environnement:

export ANSIBLE_Host_KEY_CHECKING=False
0
Rene B.