อาจเป็นวิธีที่ดีที่สุดในการทำเช่นนี้ - สมมติว่าคุณไม่สามารถใช้โซลูชัน NOPASSWD ที่ scottod จัดทำขึ้นให้ใช้โซลูชันของ Mircea Vutcovici ร่วมกับAnsible vaultหลุมฝังศพเบิ้ล
ตัวอย่างเช่นคุณอาจมี playbook บางอย่างเช่นนี้:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
ที่นี่เรารวมไฟล์ที่เรียกว่า secret
ซึ่งจะมีรหัสผ่าน sudo ของเรา
เราจะใช้ ansible-vault เพื่อสร้างเวอร์ชันที่เข้ารหัสของไฟล์นี้:
ansible-vault create secret
นี่จะขอรหัสผ่านจากคุณจากนั้นเปิดตัวแก้ไขเริ่มต้นเพื่อแก้ไขไฟล์ คุณสามารถใส่ของคุณansible_sudo_pass
ที่นี่
เช่นsecret
:
ansible_sudo_pass: mysudopassword
บันทึกและออกตอนนี้คุณมีsecret
ไฟล์ที่เข้ารหัสซึ่ง Ansible สามารถถอดรหัสเมื่อคุณเรียกใช้ playbook ของคุณ หมายเหตุ: คุณสามารถแก้ไขไฟล์ได้ansible-vault edit secret
(และป้อนรหัสผ่านที่คุณใช้เมื่อสร้างไฟล์)
ชิ้นสุดท้ายของตัวต่อคือการให้ Ansible --vault-password-file
ซึ่งมันจะใช้ในการถอดรหัสของคุณsecret
ไฟล์
สร้างไฟล์ชื่อvault.txt
และใส่รหัสผ่านที่คุณใช้เมื่อสร้างsecret
ไฟล์รหัสผ่านควรเป็นสตริงที่จัดเก็บเป็นบรรทัดเดียวในไฟล์
จาก Ansible Docs:
.. ตรวจสอบให้แน่ใจว่าการอนุญาตในไฟล์นั้นไม่มีใครสามารถเข้าถึงคีย์ของคุณได้และอย่าเพิ่มคีย์ของคุณในการควบคุมซอร์ส
ในที่สุด: ตอนนี้คุณสามารถเรียกใช้ playbook ด้วยสิ่งที่ชอบ
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
ด้านบนคือสมมติว่าไดเรคทอรีดังต่อไปนี้:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ Ansible Vault ได้ที่นี่: https://docs.ansible.com/playbooks_vault.html