# [idea] Где хранить пароль ansible-vault **Приоритет:** Низкий Пароль vault лежит открытым текстом в `./ansible-vault-password-file` (в `.gitignore`, есть `.dist`-заглушка), а `ansible.cfg:4` объявляет `vault_password_file` глобально — значит расшифровка происходит неявно в **любой** ansible-команде, не только в деплое. Из-за этой связки 24 июля `ansible-inventory --list` вывалил в транскрипт 53 из 64 vault-переменных открытым текстом. Зацепка: если файл из `vault_password_file` исполняемый, ansible запускает его и берёт пароль из stdout. То есть пароль можно не хранить на диске, а доставать из KeePassXC — `ansible.cfg` при этом не меняется, достаточно `chmod +x`. Сам скрипт секрета не содержит, его можно закоммитить и выкинуть связку `.gitignore` + `.dist`. Два способа достать, оба проверены на наличие в системе: - **Secret Service** — `secret-tool lookup` к разблокированной базе по D-Bus. Требует `libsecret-tools` (не установлен) и включённой в KeePassXC интеграции с экспортом отдельной группы. Деплой без запросов пароля, при заблокированной базе — fail-closed. - **`keepassxc-cli show -s -a Password `** — без D-Bus и без новых пакетов (`keepassxc-cli` установлен), но пароль от базы спрашивается на каждый вызов; `inv pl` придётся перевести на `pty=True`, как уже сделано в `authelia-cli` и `vault-edit`. **Нерешённый компромисс — ради него задача и заведена.** Вводить пароль руками на каждый деплой неудобно. Но любая автоматизация, которая эту неудобность снимает (разблокированная база, D-Bus, кэш), ровно так же доступна агенту: он найдёт скрипт и вызовет его сам. То есть выбор хранилища **не защищает от агента** — от него защищают только deny-правила в `~/.claude/settings.json`, которые enforcement-слой применяет снаружи. Что смена хранилища действительно даёт: пароля больше нет на диске (а значит в снапшотах restic и в Syncthing), и при заблокированной базе всё падает закрыто для всех. Прежде чем решать, стоит честно ответить: от чего именно защищаемся — от случайного дампа, от копии `~` в чужих руках, или от агента. Ответы ведут к разным вариантам, а третий не решается на этом уровне вообще. Смежное: [secrets-env-to-file](secrets-env-to-file.md) — тот же вопрос слоем ниже (секреты в `environment:` контейнеров). Отдельно не заведена, но обсуждалась, идея скоупинга: вернуть `group_vars/all/secrets.yml` в `vars_files`, оставив `main.yml` в `group_vars` — это режет потолок утечки с 53 переменных до ~11, ценой возврата boilerplate в плейбуки. Связано: ansible.cfg, tasks.py, group_vars/all/secrets.yml, ansible-vault-password-file.dist, .gitignore.