¿Cómo ignorar la verificación de autenticidad SSH ansible?

Resuelto Johan asked hace 9 años • 15 respuestas

¿Existe alguna forma de ignorar la verificación de autenticidad SSH realizada por Ansible? Por ejemplo, cuando acabo de configurar un nuevo servidor, tengo que responder sí a esta pregunta:

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)?

Sé que esto es generalmente una mala idea, pero lo estoy incorporando en un script que primero crea un nuevo servidor virtual en mi proveedor de nube y luego llama automáticamente a mi libro de jugadas ansible para configurarlo. Quiero evitar cualquier intervención humana en medio de la ejecución del script.

Johan avatar Aug 30 '15 21:08 Johan
Aceptado

Dos opciones: la primera, como dijiste en tu propia respuesta, es establecer la variable de entorno ANSIBLE_HOST_KEY_CHECKINGen Falso.

La segunda forma de configurarlo es ponerlo en un archivo ansible.cfg, y esa es una opción realmente útil porque puedes configurarlo globalmente (a nivel de sistema o usuario, en o /etc/ansible/ansible.cfg) ~/.ansible.cfg, o en un archivo de configuración en el mismo directorio. como el libro de jugadas que está ejecutando.

Para hacer eso, cree un ansible.cfgarchivo en una de esas ubicaciones e incluya esto:

[defaults]
host_key_checking = False

También puedes establecer muchos otros valores predeterminados útiles allí, como si recopilar o no datos al comienzo de una jugada, si fusionar hashes declarados en varios lugares o reemplazar uno con otro, etc. Hay una gran lista de opciones aquí en los documentos de Ansible.


Editar: una nota sobre seguridad.

La validación de la clave de host SSH es una capa de seguridad significativa para los hosts persistentes : si se conecta a la misma máquina muchas veces, es valioso aceptar la clave de host localmente.

Para instancias EC2 de mayor duración, tendría sentido aceptar la clave de host con una tarea ejecutada solo una vez en la creación inicial de la instancia:

- name: Write the new ec2 instance host key to known hosts
  connection: local
  shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

No existe ningún valor de seguridad para verificar las claves de host en instancias que se activan dinámicamente y se eliminan inmediatamente después de la ejecución del libro de jugadas, pero sí existe un valor de seguridad para verificar las claves de host para máquinas persistentes. Por lo tanto, debe administrar la verificación de claves de host de manera diferente según el entorno lógico.

  • Dejar la comprobación habilitada de forma predeterminada (en ~/.ansible.cfg)
  • Deshabilite la verificación de claves de host en el directorio de trabajo para los libros de estrategias que ejecuta en instancias efímeras ( ./ansible.cfgjunto con el libro de estrategias para pruebas unitarias contra máquinas virtuales vagabundas, automatización para instancias ec2 de corta duración)
nikobelia avatar Sep 01 '2015 18:09 nikobelia

Encontré la respuesta, debes configurar la variable de entorno ANSIBLE_HOST_KEY_CHECKINGen False. Por ejemplo:

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...
Johan avatar Aug 30 '2015 14:08 Johan

Cambiar host_key_checkinga falsepara todos los hosts es una muy mala idea.

El único momento en el que querrás ignorarlo es en el "primer contacto", lo que este manual logrará:

---
- name: Bootstrap playbook
  # Don't gather facts automatically because that will trigger
  # a connection, which needs to check the remote host key
  gather_facts: false

  tasks:
    - 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: true
    - name: Ignore host key for {{ inventory_hostname }} on first run
      when: has_entry_in_known_hosts_file.rc == 1
      set_fact:
        ansible_ssh_common_args: "-o StrictHostKeyChecking=no"
    # Now that we have resolved the issue with the host key
    # we can "gather facts" without issue
    - name: Delayed gathering of facts
      setup:

Por lo tanto, solo desactivamos la verificación de la clave del host si no tenemos la clave del host en nuestro known_hostsarchivo.

davidolrik avatar Feb 17 '2019 17:02 davidolrik