Базовый сценарий: отдельный vault‑файл

1. Создать файл с секретами:

ansible-vault create group_vars/all/vault.yml

Внутри, в YAML:

ovpn_passphrase: "мой_секретный_пароль"
db_password: "another_secret"

Команда попросит пароль для vault‑файла.[2][3]

2. Подключить файл в плейбуке:

---
- name: OVPN deploy
  hosts: all
  become: true

  vars_files:
    - group_vars/all/vault.yml

  tasks:
    - name: Decrypt ovpn archive
      ansible.builtin.shell: >
        gpg --batch --yes
        --passphrase '{{ ovpn_passphrase }}'
        -d '{{ ovpn_tmp_dir }}/{{ ovpn_gpg_file }}'
        > '{{ ovpn_tmp_dir }}/{{ ovpn_tar_file }}'
      no_log: true

Все обращения к {{ ovpn_passphrase }} будут прозрачно расшифрованы.[1][2]

3. Запуск playbook с запросом vault‑пароля:

ansible-playbook site.yml --ask-vault-pass

Либо через файл пароля:

echo 'очень_длинный_vault_пароль' > ~/.ansible_vault_pass
chmod 600 ~/.ansible_vault_pass

ansible-playbook site.yml --vault-password-file ~/.ansible_vault_pass

Шифрование существующих файлов

  • Зашифровать уже существующий vars‑файл:
ansible-vault encrypt group_vars/all/vault.yml
  • Расшифровать (если надо отредактировать вне Vault):
ansible-vault decrypt group_vars/all/vault.yml
  • Редактировать «на месте» (без decrypt/encrypt вручную):
ansible-vault edit group_vars/all/vault.yml

Точечное шифрование переменной (encrypt_string)

Когда не хочется шифровать весь файл, можно зашифровать только строку:

ansible-vault encrypt_string --name 'ovpn_passphrase'

Дальше вводишь пароль Vault, затем значение секрета, Ctrl+D. На выходе получишь блок вида:

ovpn_passphrase: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          323134343935383935633863643637343332383061346166...

Этот блок вставляешь в обычный vars‑файл.[4][5][6]

Практические советы

  • Пароли/ключи всегда храни в Vault или внешнем секрет‑менеджере, ни одного пароля в чистом YAML.[7][8][9]
  • На всех задачах, которые используют секреты (пароли БД, GPG‑пароли и т.п.), ставь no_log: true, чтобы они не попадали в stdout/лог Ansible.[10][2]
  • Файл с vault‑паролем (--vault-password-file) не коммить в git; держать его только локально/в CI‑секретах.[8][7]

Если покажешь структуру своего репозитория (roles/, group_vars/, host_vars/), можно сразу накидать готовую схему vault.yml под твои ovpn/gpg/docker‑секреты.

[1](https://www.digitalocean.com/community/tutorials/how-to-use-vault-to-protect-sensitive-ansible-data)
[2](https://docs.ansible.com/ansible/latest/vault_guide/index.html)
[3](https://docs.ansible.com/ansible/latest/cli/ansible-vault.html)
[4](https://www.freekb.net/Article?id=2426)
[5](https://docs.ansible.com/ansible/latest/vault_guide/vault_encrypting_content.html)
[6](https://stackoverflow.com/questions/55849706/ansible-vault-encrypt-string)
[7](https://spacelift.io/blog/ansible-vault)
[8](https://teachmeansible.com/blog/ansible-vault-secrets-management)
[9](https://betterstack.com/community/guides/linux/ansible-secrets/)
[10](https://www.automatesql.com/blog/what-is-inline-vault-encryption-a-guide-to-using-ansibe-vault-encrypt_string)
[11](https://www.youtube.com/watch?v=JUybKMSUcqI)
[12](https://www.youtube.com/watch?v=-W_VuYt_qQw)
[13](https://www.youtube.com/watch?v=xeBnAbmt3Wk)
[14](https://www.youtube.com/watch?v=DueHdN23TcM)
[15](https://svenvg.com/posts/ansible-essentials-managing-secrets-with-vault/)
[16](https://docs.ansible.com/ansible/2.8/user_guide/vault.html)
[17](https://dev.to/lovestaco/managing-secrets-in-ansible-with-vault-3481)
[18](https://www.reddit.com/r/ansible/comments/10f9foy/new_to_ansible_how_do_i_use_vault/)
[19](https://www.reddit.com/r/ansible/comments/15fcjjp/is_there_any_point_in_using_vault_to_secure/)
[20](https://www.env0.com/blog/protecting-secrets-with-ansible-vault)

[file-name 000309_2026-01-01_15-37-53.txt]