
Creé una instancia ec2 con el puerto 22 abierto y puedo conectarme a esta instancia usando la clave privada de mi terminal, sin embargo, no puedo conectarla cuando intento ansible-playbook. He estado usando inventario dinámico.
El comando que uso para SSH y que también tiene éxito (estoy ejecutando el siguiente comando donde se coloca la clave privada):
ssh -i "test-key.pem" [email protected]
Contenido del libro de jugadas:
---
- name: Hello World example
hosts: all
become: true
tasks:
- name: Printing Hello World
debug:
msg: "Hello World"
El comando que ejecuté:
ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id playbook-hello.yml
Incluso lo intenté con:
ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id -e 'ansible_ssh_user=ubuntu' playbook-hello.yml
Error:
fatal: [x.x.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Operation timed out\r\n", "unreachable": true}
Otros detalles:
Estoy ejecutando ansible-playbooks en mi MacBook Pro. La instancia EC2 ejecuta Ubuntu OS 18.04.
Cuando ejecuto ./ec2.py, puedo ver que mi instancia se está imprimiendo. Las claves de AWS se guardan en la carpeta .aws/credentials del directorio principal.
PD: Esta pregunta podría ser un duplicado de otras preguntas disponibles, pero no obtuve ninguna información positiva que coincida con mi caso.
Respuesta1
Fue malo entender que el script ec2.py, que se usó, solo devolvía instancias con IP privadas. Y debido a eso, no pudo conectarse a la instancia en el puerto 22.
Sin embargo, cuando estaba haciendo ssh, estaba usando una IP pública o un nombre DNS.
Entonces, en lugar de usar ec2.py, ejecuté el script usando la IP pública:
ansible-playbook -i a.b.c.d, playbook-hello-world.yml
abcd: es una IP pública de una instancia.
Si por casualidad alguien recibe el siguiente error:
TASK [Gathering Facts] ***************************************************************************************************************************************
fatal: [a.b.c.d]: FAILED! => {"changed": false, "module_stderr": "Shared connection to a.b.c.d closed.\r\n", "module_stdout": "/bin/sh: 1: /usr/local/bin/python3: not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}
Utilice el siguiente comando:
ansible-playbook -i a.b.c.d, -e 'ansible_python_interpreter=/usr/bin/python3' playbook-hello-world.yml
Solo asegúrese de que pythos3 esté instalado en la ruta mencionada de la instancia, donde está intentando ejecutar el libro de jugadas.