Mi script de Ansible crea una máquina AWS y luego intenta conectarse a ella. Dependiendo de la imagen que estoy creando, el nombre de usuario predeterminado para iniciar sesión SSH es 'centos' o 'ubuntu', etc.
Mi secuencia de comandos a continuación falla en wait_for_connection con un error de "permiso denegado". Iasumiresto se debe a que ssh está utilizando el nombre de usuario incorrecto; el nodo de control ejecuta el script como 'userx'. (Confirmé que mi clave pública está en la máquina remota y que mi clave privada coincidente está disponible en el nodo de control).
¿Cómo ajusto mi script para que ansible use el nombre de usuario correcto? No puedo especificarlo en el inventario ya que el host se acaba de crear y el nombre de usuario depende del tipo de instancia. No existe la opción 'nombre de usuario' para wait_for_connection
Mi guión:
- name: Create one AWS machine
local_action:
module: ec2
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
key_name: "{{ key_name }}"
group_id: "{{ security_group_id }}"
instance_type: "{{ instance_type }}"
image: "{{ ami_id }}"
wait: true
region: "{{ aws_region }}"
zone: "{{ aws_zone}}"
vpc_subnet_id: "{{ aws_vpc_subnet }}"
assign_public_ip: yes
register: ec2
- name: Wait for SSH to come up
delegate_to: "{{ ec2.instances[0].public_dns_name }}"
wait_for_connection:
delay: 60
sleep: 15
timeout: 40
Intenté configurar el usuario y el archivo de claves justo antes de wait_for_connection como se muestra a continuación, pero ansible aún informa que se conecta como usuario NINGUNO, y los archivos de claves probados no enumeran mi archivo de claves (/root/.ssh/mykey):
- name: Prepare to connect to new node
set_fact:
ansible_user: 'centos'
ansible_ssh_private_key_file: "{{ private_key_file }}"
y parte de la salida ansible:
<ec2-34-27-194-74.compute-1.amazonaws.com> ESTABLISH SSH CONNECTION FOR USER: None
debug1: identity file /root/.ssh/id_ecdsa type -1
Respuesta1
Puede establecer variables en cualquier tarea, bloque o juego usando la vars
palabra clave.
- name: Wait for SSH to come up
delegate_to: "{{ ec2.instances[0].public_dns_name }}"
wait_for_connection:
delay: 60
sleep: 15
timeout: 40
vars:
ansible_user: centos