(Версия Ansible - это 2.5.0, управляющая машина - это Linux, как и клиенты)
Я хочу использовать специальный режим ansible с файлом group_vars, зашифрованным в хранилище. Файл group_vars называется local_vms.yml и выглядит так:
1 ---
2 vars:
3 - pass: a_password
4 - ansible_user: grahamn
5 - ansible_ssh_pass: "{{ pass }}"
Таким образом, инвентарь содержит группу с именем local_vms и находится в текущем каталоге, а файл local_vms.yml находится в подкаталоге с именем group_vars.
Бегу вот так:
ansible -m command -a"uname" -ihosts local_vms
переменная ANSIBLE_VAULT_PASSWORD_FILE экспортируется как путь к хорошо защищенному (и вне дерева git) файлу.
Я знаю, что зашифрованный файл хранилища расшифровывается и используется, потому что, если я изменю значение ansible_user, оно будет использовать измененное значение (и ошибки, поскольку у меня нет этого пользователя).
Команда работает нормально для хоста, на котором я настроил authorised_keys, но не для того, где я намеренно удалил его, поэтому игнорирует значение для ansible_ssh_pass.
Если я увеличиваю подробность, я замечу, что команда ssh содержит строку «PasswordAuthentication = no», поэтому я добавляю соответствующий параметр:
ansible -vvv -i hosts -m command -auname local_vms --ssh-common-args="PasswordAuthentication=yes"
и получите эту ошибку: Не удалось разрешить аутентификацию пароля имени хоста = да:
Кроме того, удаленно / etc / ssh / sshd_config и / etc / ssh / ssh_config настроены так, чтобы разрешить использование паролей. ssh root @ infx запрашивает пароль и успешно входит в систему.
Таким образом, можно использовать режим ad-doc с именем пользователя и паролем, заданными как переменные в хранилище, и если да, то что я делаю не так. Спасибо.
Немного предыстории: мне нравится легкий подход к администрированию - вы должны стараться как можно реже входить на серверы. Мне интересно, жизнеспособен ли подход делать все с помощью ansible. Первоначально команды могли быть (как здесь) специальными, но позже мы создадим playbook для всего, что нам нужно делать. Я ненавижу ручное вмешательство на серверах, и, к сожалению, марионетка часто не работает (и в любом случае я предпочитаю анзибль).
ОБНОВИТЬ:
Редактируем команду в этом:
ansible -m command -a whoami ...
показывает, что даже если файл group_vars.yml устанавливает для ansible_user значение root, он не используется. Так что теперь я в замешательстве. Я не могу установить ansible_user в файле group_vars? Файл group_vars должен находиться в каталоге под файлом инвентаризации с именем группы (+ .yml, если необходимо), где имя каталога - «group_vars».
Запуск strace при запуске ansible показывает, что он действительно открывает файл group_vars / local_vms.yml, и это:
$ ansible -i hosts -m command -awhoami local_vms -u root -k
SSH password:
ubuntus01 | SUCCESS | rc=0 >>
root
influx | SUCCESS | rc=0 >>
root
centoss02 | SUCCESS | rc=0 >>
root
grafana | SUCCESS | rc=0 >>
root
работает как видите.
Теперь мне интересно, ошибочен ли мой подход. Я хочу иметь возможность использовать хранилище для аутентификации как с плейбуками, так и с специальными командами - возможно ли это?
Проблема была в формате моего файла group_vars. С таким файлом:
1 ---
2
3 pass: areallygoodpassword
4 ansible_user: root
5 ansible_ssh_pass: "{{ pass }}"
Все работает отлично.
Осталось только проголосовать за мой ответ.