Probablemente la mejor manera de hacerlo, suponiendo que no pueda usar la solución NOPASSWD proporcionada por scottod es usar la solución de Mircea Vutcovici en combinación con la bóveda Ansible .
Por ejemplo, puede tener un libro de jugadas como este:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
Aquí incluimos un archivo llamado secret
que contendrá nuestra contraseña de sudo.
Utilizaremos ansible-vault para crear una versión encriptada de este archivo:
ansible-vault create secret
Esto le pedirá una contraseña, luego abra su editor predeterminado para editar el archivo. Puedes poner tu ansible_sudo_pass
aquí.
por ejemplo secret
::
ansible_sudo_pass: mysudopassword
Guarde y salga, ahora tiene un secret
archivo cifrado que Ansible puede descifrar cuando ejecuta su libro de jugadas. Nota: puede editar el archivo con ansible-vault edit secret
(e ingresar la contraseña que utilizó al crear el archivo)
La pieza final del rompecabezas es proporcionar a Ansible una --vault-password-file
que usará para descifrar su secret
archivo.
Cree un archivo llamado vault.txt
y en ese lugar coloque la contraseña que utilizó al crear su secret
archivo. La contraseña debe ser una cadena almacenada como una sola línea en el archivo.
De los documentos de Ansible:
.. asegúrese de que los permisos en el archivo sean tales que nadie más pueda acceder a su clave y no agregue su clave al control de origen
Finalmente: ahora puedes ejecutar tu libro de jugadas con algo como
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
Lo anterior supone el siguiente diseño de directorio:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
Puede leer más sobre Ansible Vault aquí: https://docs.ansible.com/playbooks_vault.html