Мне нравится делать это так:
- 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
Я пытаюсь подключиться к удаленному хосту с моим пользователем. Если это невозможно (при первом запуске), я подключаюсь от имени пользователя root и создаю пользователя ansible вместе с его authorized_keys
файлом и sudo
правами.
При последующих запусках работает подключение как ANSIBLE user, поэтому блок задач можно пропустить.
После того, как удаленный хост загружен, я могу продолжить с пользователем ansible и become
:
- hosts: all
remote_user: ansible
become: yes
roles:
- ...