Базовый сценарий: отдельный 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]