Me gusta hacerlo de esta manera:
- hosts: all
remote_user: root
gather_facts: no
tasks:
- name: Check ansible user
command: ssh -q -o BatchMode=yes -o ConnectTimeout=3 ansible@{{ inventory_hostname }} "echo OK"
delegate_to: 127.0.0.1
changed_when: false
failed_when: false
register: check_ansible_user
- block:
- name: Create Ansible user
user:
name: ansible
comment: "Ansible user"
password: $6$u3GdHI6FzXL01U9q$LENkJYHcA/NbnXAoJ1jzj.n3a7X6W35rj2TU1kSx4cDtgOEV9S6UboZ4BQ414UDjVvpaQhTt8sXVtkPvOuNt.0
shell: /bin/bash
- name: Add authorized key
authorized_key:
user: ansible
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
exclusive: yes
- name: Allow sudo for ansible
copy:
content: ansible ALL=(ALL) ALL
dest: /etc/sudoers.d/ansible
mode: 0600
when: check_ansible_user | failed
Intento conectarme al host remoto con mi usuario ansible. Si esto es imposible (en la primera ejecución), me conecto como root y creo el usuario ansible junto con su authorized_keys
archivo y sus sudo
derechos.
En ejecuciones posteriores, la conexión como usuario ansible funciona, por lo que se puede omitir el bloque de tareas.
Una vez que el host remoto está arrancado, puedo continuar con el usuario ansible y become
:
- hosts: all
remote_user: ansible
become: yes
roles:
- ...