Ansible, хранение зашифрованных паролей в переменных

Thank you for reading this post, don't forget to subscribe!

Не все­гда есть воз­мож­ность управ­лять устрой­ства­ми и опе­ра­ци­он­ны­ми систе­ма­ми по клю­чу. Напри­мер, я столк­нул­ся с Cisco сви­ча­ми со ста­ры­ми про­шив­ка­ми и при попыт­ке под­клю­че­ния к ним из под Ansible полу­чал ошиб­ку: «Illegal info request from server«. Реше­ние: обно­вить про­шив­ку на сви­че… Но такая воз­мож­ность не все­гда есть. Поэто­му при­ду­мал реше­ние, как хра­нить паро­ли от таких устройств в зашиф­ро­ван­ном виде.

К при­ме­ру у нас есть два сви­ча sw1 и sw2 с учет­кой admin и раз­ны­ми паролями.
Файл hosts выгля­дит так:
[cisco_pass]
sw1 ansible_ssh_host=192.168.1.1 ansible_ssh_user=admin ansible_ssh_pass="{{ pass_sw1}}"
sw2 ansible_ssh_host=192.168.1.2 ansible_ssh_user=admin ansible_ssh_pass="{{ pass_sw2}}"
В каче­стве паро­ля тут исполь­зу­ют­ся пере­мен­ные pass_sw1 и pass_sw2.
Эти пере­мен­ные будем хра­нить в фай­ле cisco_pass.yml:
pass_sw1 : password1
pass_sw2 : password2
Теперь зашиф­ру­ем этот файл  (AES256):
# ansible-vault encrypt /etc/ansible/group_vars/cisco_pass.yml
Соб­ствен­но на этом всё, мож­но исполь­зо­вать наши сви­чи в playbook test-cisco.yml.
При­мер, добав­ле­ние клю­ча в Cisco switch:

[codesyntax lang="php"]

[/codesyntax]

# ansible-playbook -i hosts test-cisco.yml --ask-vault-pass