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

Через ansible изменить пароль учетной записи без полномочий root с помощью команды passwd и выбрать старый пароль из файлов ansible

У меня есть много систем с общим именем пользователя для входа. Пароль также одинаков для большинства систем. У меня есть 1 инвентарный файл со всеми системами. Для систем с другим паролем я сохранил пароль для имени хоста, а для остальных он находится в файле group_vars.

В файле инвентаря:

hostname1 ansible_ssh_pass=pass1
hostname2 ansible_ssh_pass=pass2
hostname3
hostname4

файл group_vars:

ansible_user: someuser
ansible_ssh_pass: pass3

У меня нет высших привилегий. Из другого потока я смог выяснить, как использовать passwd только для изменения пароля и не использовать другие утилиты.

shell: 'printf "%s\n" OldPass NewPass NewPass | passwd'

Passwd не поддерживает параметр "-p".

Я пытаюсь найти способ получить значение OldPass из того же места, где ansible выбирает его для каждого хоста, чтобы мне не приходилось запускать этот playbook n раз и вручную помещать OldPass в команду оболочки.

Пожалуйста, посоветуйте, как это сделать.

Спасибо.

Вы можете использовать переменные напрямую:

$ ansible -c local -m shell \
  -a "printf '%s\n' {{ ansible_ssh_pass }} {{ ansible_ssh_newpass }}" \
  --extra-vars="ansible_ssh_pass=oldpass ansible_ssh_newpass=newpass" \
  localhost
127.0.0.1 | SUCCESS | rc=0 >>
oldpass
newpass

В этом примере переменные передаются в ansible из командной строки, в вашем примере они будут поступать из group_vars.

Вы даже можете определить значение по умолчанию и переопределить его для определенных систем:

$ ansible -c local -m shell \
  -a "printf '%s\n' {{ ansible_ssh_pass | default('otherpass') }} {{ ansible_ssh_newpass }}" \
  --extra-vars="ansible_ssh_newpass=newpass" \
  localhost
127.0.0.1 | SUCCESS | rc=0 >>
otherpass
newpass