Provavelmente, a melhor maneira de fazer isso - supondo que você não possa usar a solução NOPASSWD fornecida pela scottod é usar a solução de Mircea Vutcovici em combinação com o Ansible Vault .
Por exemplo, você pode ter um manual assim:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
Aqui estamos incluindo um arquivo chamado secret
que conterá nossa senha sudo.
Usaremos o ansible-vault para criar uma versão criptografada deste arquivo:
ansible-vault create secret
Isso solicitará uma senha e abra seu editor padrão para editar o arquivo. Você pode colocar o seu ansible_sudo_pass
aqui.
por exemplo secret
:
ansible_sudo_pass: mysudopassword
Salve e saia, agora você tem um secret
arquivo criptografado que o Ansible pode descriptografar quando você executa o seu manual. Nota: você pode editar o arquivo com ansible-vault edit secret
(e inserir a senha usada ao criar o arquivo)
A peça final do quebra-cabeça é fornecer ao Ansible um --vault-password-file
que ele usará para descriptografar seu secret
arquivo.
Crie um arquivo chamado vault.txt
e coloque a senha que você usou ao criar seusecret
arquivo. A senha deve ser uma sequência armazenada como uma única linha no arquivo.
Dos Documentos Ansible:
.. garantir que as permissões no arquivo sejam tais que ninguém mais possa acessar sua chave e não a adicione ao controle de origem
Por fim: agora você pode executar seu playbook com algo como
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
O acima está assumindo o seguinte layout de diretório:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
Você pode ler mais sobre o Ansible Vault aqui: https://docs.ansible.com/playbooks_vault.html