Mungkin cara terbaik untuk melakukan ini - dengan asumsi bahwa Anda tidak dapat menggunakan solusi NOPASSWD yang disediakan oleh scottod adalah dengan menggunakan solusi Mircea Vutcovici dalam kombinasi dengan brankas yang dimungkinkan .
Misalnya, Anda mungkin memiliki buku pedoman seperti ini:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
Di sini kita termasuk file yang disebut secret
yang akan berisi kata sandi sudo kami.
Kami akan menggunakan ansible-vault untuk membuat versi terenkripsi dari file ini:
ansible-vault create secret
Ini akan meminta Anda kata sandi, lalu buka editor default Anda untuk mengedit file. Anda bisa meletakkannya ansible_sudo_pass
di sini.
misalnya secret
:
ansible_sudo_pass: mysudopassword
Simpan dan keluar, sekarang Anda memiliki secret
file terenkripsi yang dapat didekripsi oleh Ansible ketika Anda menjalankan playbook Anda. Catatan: Anda dapat mengedit file dengan ansible-vault edit secret
(dan memasukkan kata sandi yang Anda gunakan saat membuat file)
Bagian terakhir dari teka-teki adalah untuk menyediakan Ansible dengan --vault-password-file
yang akan digunakan untuk mendekripsi secret
file Anda .
Buat file yang dipanggil vault.txt
dan masukkan kata sandi yang Anda gunakan saat membuat secret
file Anda . Kata sandi harus berupa string yang disimpan sebagai satu baris dalam file.
Dari Ansible Documents:
.. memastikan izin pada file sedemikian rupa sehingga tidak ada orang lain yang dapat mengakses kunci Anda dan tidak menambahkan kunci Anda ke kontrol sumber
Akhirnya: Anda sekarang dapat menjalankan buku pedoman Anda dengan sesuatu seperti
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
Di atas mengasumsikan tata letak direktori berikut:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
Anda dapat membaca lebih lanjut tentang Vault Ansible di sini: https://docs.ansible.com/playbooks_vault.html