Dos opciones: la primera, como dijiste en tu propia respuesta, es establecer la variable de entorno ANSIBLE_HOST_KEY_CHECKING
en False.
La segunda forma de configurarlo es ponerlo en un archivo ansible.cfg, y esa es una opción realmente útil porque puede configurarlo globalmente (a nivel de sistema o usuario, en /etc/ansible/ansible.cfg
o ~/.ansible.cfg
), o en un archivo de configuración en el mismo directorio como el libro de jugadas que estás ejecutando.
Para hacer eso, cree un ansible.cfg
archivo en una de esas ubicaciones e incluya esto:
[defaults]
host_key_checking = False
También puedes establecer muchos otros valores predeterminados útiles, como si se recopilan o no los hechos al comienzo de una jugada, si se combinan los hashes declarados en varios lugares o se reemplaza uno por otro, y así sucesivamente. Hay una gran lista de opciones aquí en los documentos de Ansible.
Editar: una nota sobre seguridad.
La validación de clave de host SSH es una capa de seguridad significativa para 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 hay un valor de seguridad para verificar las claves de host en instancias que se pone de pie dinámicamente y eliminar inmediatamente después de la ejecución del libro de jugadas, pero hay un valor de seguridad en la comprobación de claves de host para máquinas persistentes. Por lo tanto, debe administrar la comprobación de claves de host de manera diferente por entorno lógico.
- Deje la comprobación habilitada de forma predeterminada (en
~/.ansible.cfg
)
- Deshabilite la comprobación de la clave de host en el directorio de trabajo para los libros de jugadas que ejecuta contra instancias efímeras (
./ansible.cfg
junto con el libro de jugadas para pruebas unitarias contra máquinas virtuales vagabundas, automatización para instancias ec2 de corta duración)
known_hosts
archivos locales para SSH y Ansible para reconocer la máquina. Si no lo hace, especialmente al deshabilitar la comprobación de la clave del host, la seguridad de SSH se degrada a casi cero y permite ataques MITM. Muchas máquinas que parecen estar en una "red interna" están realmente conectadas a Internet, donde una respuesta de DNS más rápida le permite hablar con el atacante en lugar de su objetivo.ssh-keyscan <ip list>
en una máquina confiable (para mí, es un host bastion / jump) dentro de la misma red, y puse los resultados enknown_hosts
Para configurar ese host confiable, AWS expone el clave de host en los registros de inicio de la instancia, por lo que buscar esa clave fue un paso manual que nunca eliminé si hacía una recreación completa de mi entorno. Pero ese host generalmente no necesitaba ser eliminado. Esto puede ayudar.Encontré la respuesta, debe establecer la variable de entorno
ANSIBLE_HOST_KEY_CHECKING
enFalse
. Por ejemplo:fuente
adelante a Nikolaia
Para aquellos que usan jenkins para ejecutar el libro de jugadas, acabo de agregar a mi trabajo de jenkins antes de ejecutar el libro de jugadas ansible la variable de entorno ANSIBLE_HOST_KEY_CHECKING = False. Por ejemplo esto:
fuente
Cambiar
host_key_checking
afalse
todos los hosts es una muy mala idea.El único momento en que desea ignorarlo es en el "primer contacto", que estas dos tareas lograrán:
Por lo tanto, solo desactivamos la comprobación de la clave del host si no tenemos la clave del host en nuestro
known_hosts
archivo.fuente
Puede pasarlo como argumento de línea de comando mientras ejecuta el libro de jugadas:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
fuente
Si no desea modificar
ansible.cfg
oplaybook.yml
simplemente puede configurar una variable de entorno:fuente
Use el parámetro nombrado como validate_certs para ignorar la validación ssh
Al hacer esto, ignora el proceso de validación ssh
fuente
validate_certs
parámetro simplemente le dice a boto que no valide el certificado HTTPS API de AWS. No afecta la verificación de la clave SSH.Sé que la pregunta ha sido respondida y también es correcta, pero solo quería vincular el documento ansible donde se explica claramente cuándo y por qué se debe agregar la verificación respectiva: comprobación de clave de host
fuente
La mayoría de los problemas aparecen cuando desea agregar un nuevo host al inventario dinámico (a través del módulo add_host) en el libro de jugadas. No quiero deshabilitar la comprobación del host de huellas dactilares de forma permanente, por lo que las soluciones como deshabilitarlo en un archivo de configuración global no están bien para mí. Exportar var like
ANSIBLE_HOST_KEY_CHECKING
antes de ejecutar Playbook es otra cosa que hacer antes de ejecutar que debe recordarse.Es mejor agregar el archivo de configuración local en el mismo directorio donde está el libro de jugadas. Cree un archivo llamado
ansible.cfg
y pegue el siguiente texto:No es necesario recordar agregar algo en los entornos o agregar a las
ansible-playbook
opciones. Es fácil poner este archivo en ansible git repo.fuente