Có lẽ cách tốt nhất để làm điều này - giả sử rằng bạn không thể sử dụng giải pháp NOPASSWD do scottod cung cấp là sử dụng giải pháp Mircea Vutcovici kết hợp với kho tiền Ansible .
Ví dụ: bạn có thể có một cuốn sách như thế này:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
Ở đây chúng tôi bao gồm một tệp được gọi secret
sẽ chứa mật khẩu sudo của chúng tôi.
Chúng tôi sẽ sử dụng ansible-vault để tạo phiên bản được mã hóa của tệp này:
ansible-vault create secret
Điều này sẽ yêu cầu bạn nhập mật khẩu, sau đó mở trình chỉnh sửa mặc định của bạn để chỉnh sửa tệp. Bạn có thể đặt của bạn ansible_sudo_pass
ở đây.
ví dụ secret
::
ansible_sudo_pass: mysudopassword
Lưu và thoát, bây giờ bạn có một secret
tệp được mã hóa mà Ansible có thể giải mã khi bạn chạy Playbook. Lưu ý: bạn có thể chỉnh sửa tệp bằng ansible-vault edit secret
(và nhập mật khẩu bạn đã sử dụng khi tạo tệp)
Phần cuối cùng của câu đố là cung cấp cho Ansible cái --vault-password-file
mà nó sẽ sử dụng để giải mã secret
tập tin của bạn .
Tạo một tệp được gọi vault.txt
và trong đó đặt mật khẩu mà bạn đã sử dụng khi tạo secret
tệp của mình . Mật khẩu phải là một chuỗi được lưu dưới dạng một dòng trong tệp.
Từ Tài liệu Ansible:
.. đảm bảo quyền trên tệp sao cho không ai khác có thể truy cập khóa của bạn và không thêm khóa của bạn vào kiểm soát nguồn
Cuối cùng: bây giờ bạn có thể chạy playbook của mình với một cái gì đó như
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
Trên đây là giả sử bố trí thư mục sau:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
Bạn có thể đọc thêm về Ansible Vault tại đây: https://docs.ansible.com/playbooks_vault.html