Se utilizaron los módulos user para crear el usuario, authorized_key para distribuir la clave pública de BackupPc y lineinfile para modificar el sudoers.
Se generó un archivo backuppcClient.yml con el siguiente código:
---
- hosts: client1
remote_user: admin
become: yes
vars:
users:
- "backuppc"
tasks:
- name: create user backuppc
user:
name: "{{ item }}"
shell: /bin/bash
with_items: "{{ users }}"
- name: Add public key in authorized_keys'
authorized_key:
user: "{{ item }}"
key: "{{ lookup('file', 'id_rsa.pub') }}"
with_items: "{{ users }}"
- name: Add rsync without password in sudoers
copy:
content: "backuppc ALL=NOPASSWD: /usr/bin/rsync --server --sender * \n"
dest: /etc/sudoers.d/backuppc
backup: yes
owner: root
group: root
mode: 0440
validate: /usr/sbin/visudo -cf %s
El archivo id_rsa.pub contiene la clave pública del BackupPc.
El script se ejecuta de la siguiente manera:
admin@ansible:~$ ansible-playbook backuppcClient.yml -K
SUDO password:
PLAY [192.168.0.100] *************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************
ok: [192.168.0.100]
TASK [Crear usuario BackupPc] **************************************************************************************************************************************************
ok: [192.168.0.100] => (item=backuppc)
TASK [Agregar clave pública al authorized_keys] **************************************************************************************************************************************************
ok: [192.168.0.100] => (item=backuppc)
TASK [Modificar archivo sudoers para ejecutar rsync sin contraseña] *************************************************************************************************************************
ok: [192.168.0.100]
PLAY RECAP **********************************************************************************************************************************************************************
192.168.0.100 : ok=4 changed=3 unreachable=0 failed=0
admin@ansible:~$