Назад | Перейти на главную страницу

Специальная команда ansible с хранилищем

(Версия 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 }}"

Все работает отлично.

Осталось только проголосовать за мой ответ.