Ansible обрабатывает смену пароля при первом входе в систему

#ansible #change-password

#ansible #смена пароля

Вопрос:

Я создаю сборник задач, который входит в виртуальную машину и выполняет начальную настройку. Образ, используемый для создания виртуальной машины, имеет имя пользователя по умолчанию, которое требует смены пароля при первоначальном входе в систему. Я ищу способ, как справиться с этим в Ansible?

Ответ №1:

Я нашел решение своей проблемы следующим образом, используя модуль ansible «expect» https://docs.ansible.com/ansible/latest/collections/ansible/builtin/expect_module.html

 - name: Change password on initial login
  delegate_to: 127.0.0.1
  become: no
  expect:
    command: ssh {{ ansible_ssh_common_args }} {{ user_expert }}@{{ inventory_hostname }}
    timeout: 20
    responses:
      Password: "{{ user_expert_password }}"
      UNIX password: "{{ user_expert_password }}"
      New password: "{{ user_expert_password_new }}"
      new password:  "{{ user_expert_password_new }}"
      "\~\]\$": exit
  register: status
  

Комментарии:

1. Если вы попытаетесь запустить playbook для списка инвентаря, который включает серверы, которым требуется изменить пароль при первом входе в систему, вы получите сообщение об ошибке типа «Требуется смена пароля, но TTY недоступен». Это связано с тем, что ansible пытается подключиться к хосту по ssh еще до того, как ваша задача начнет выполняться, и получает эту ошибку. Вам нужно будет перебирать список IP-адресов в вашей задаче, пока вы запускаете свой ansible playbook только на localhost.

Ответ №2:

Вы ищете пользовательский модуль, особенно параметр пароля.

Имейте в виду, что для этой password опции требуется хэш фактического пароля. Проверьте здесь, как это сделать. (Он должен быть хэширован, иначе у вас будет открытый текстовый пароль в вашем playbook или инвентаре, что может представлять угрозу безопасности.)

Пример:

 - name: ensure password of default user is changed
  user:
    name: yourdefaultuser
    password: '$6$QkjC8ur2WfMfYGA$ZNUxTGoe5./F0b4GJGrcEA.ff9An473wmPsmU4xv00nSrN4D/Nxk8aKro/E/LlQVkUJLbLL6qk2/Lxw5Oxs2m.'
  

Обратите внимание, что хэш пароля был сгенерирован mkpasswd --method=sha-512 для пароля somerandompassword .

Комментарии:

1. Пожалуйста, перечитайте мой вопрос. Когда виртуальная машина развернута, ansible не может получить к ней доступ, поскольку она не может позволить вам войти в систему с именем пользователя и паролем по умолчанию, пока пароль не будет изменен.

2. В вашем вопросе говорится: «имеет имя пользователя по умолчанию, которое требует смены пароля при первоначальном входе в систему», что не соответствует вашему последнему комментарию. В вашем вопросе не указано, что вы не можете войти в систему, используя эти учетные данные. Однако, как бы вы вообще вошли в систему? Почему вы не можете войти в систему с учетными данными по умолчанию?

3. Чтобы избежать путаницы, ниже приведены журналы при первом подключении к виртуальной машине по ssh из моей системы ~~~ # ssh default@X.X.X.X ЕСЛИ ВЫ НЕ АВТОРИЗОВАННЫЙ ПОЛЬЗОВАТЕЛЬ, ПОЖАЛУЙСТА, НЕМЕДЛЕННО ВЫЙДИТЕ ИЗ пароля: Вам необходимо немедленно сменить свой пароль (root принудительно) Изменение пароля для эксперта. (текущий) Пароль UNIX: Новый пароль: Повторный ввод нового пароля: ~~~ как справиться с этим через Ansible?

4. Это похоже на пользовательское сообщение, что это за изображение, кто его создал?

5. Это VNF telco .. принуждение пользователя к смене пароля при первом входе в систему является нормальным в Linux. Если вы создадите пользователя с опцией «-e «, пользователь будет вынужден изменить пароль при первоначальном входе в систему.