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

Не всегда есть возможность управлять устройствами и операционными системами по ключу. Например, я столкнулся с 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:
- 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"
 
# ansible-playbook -i hosts test-cisco.yml --ask-vault-pass

Добавить комментарий

Ваш адрес email не будет опубликован.