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"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
- hosts: cisco_pass gather_facts: no connection: network_cli vars_files: - /etc/ansible/group_vars/cisco.yml - /etc/ansible/group_vars/cisco_pass.yml tasks: - name: Add admin cert ios_config: parents: - ip ssh pubkey-chain - username admin - key-string lines: - "!!!НАШ_КЛЮЧ!!! am5roRfdsfCREHELkHrcM6ROK0XEqqCBS" - "uVSoDn0bObShaw77eMVvFiv6H2e7Z29/mlMaIQYumM+1NECUwkTCyiPZFoTPBzy" - "3laYWNeyRhLAmifx4K72CuFSWXEKzm3lqXV9cJ7jSa2kNZGca8YTNs7kxDrMbf" - "FHcavV9/PrE6Oss9jn+KaoGACrIGfvAPa/6HoF1fI0QNNwY7WKr0Atw3ryN3aQT" - "DGPDlGLTJxGYkpcmKQe6i1iyboyDrnFVjxZoQ+g3X/XCk46UCNkcO3RqnaqOxe" - "s86/mgxz/gXWfme04r" - "exit" |
[/codesyntax]
# ansible-playbook -i hosts test-cisco.yml --ask-vault-pass |