Мои новые экземпляры сервера настроены для входа в систему с правами root через ssh с паролем. Я хочу, чтобы моя книга воспроизведения Ansible реконфигурировала его, вместо этого использовала ключи и отключила root-логин с паролем при первом запуске, поэтому мне нужно что-то вроде этого:
- попробуйте войти с ключом
если не могу войти с ключом:
- войти с паролем
- добавить ключ для авторизованных ключей
- отключить root-логин с паролем
- по желанию переподключиться с помощью ключа
делать другие задачи
Как я могу это сделать?
РЕДАКТИРОВАТЬ : Чтобы было ясно, я не спрашиваю, как добавить ключ или отключить root, это только для контекста. Я спрашиваю, как вернуться к паролю, если он не может аутентифицироваться с ключом. С --ask-pass
или ansible_ssh_pass
установлен, Ansible даже не будет пытаться использовать аутентификацию с открытым ключом
ssh
authentication
ansible
petr0
источник
источник
Ответы:
Вы можете попробовать
PreferredAuthentications
вариант, установив его наpublickey,password
. Значение по умолчанию включает их в этом порядке, наряду с другими параметрами, так что ansible, вероятно, устанавливает это. Добавление через-o
или клиентssh_config
может предотвратить это.Вы можете использовать скрипт-обертку. Например, при этом в
key_or_password.sh
и a,pass.sh
который дает пароль, во время работыbash key_or_password.sh root@host
будет пытаться использовать публичный ключ, за которым следует неинтерактивный вход в систему с паролем.В журнале указывается, какой метод был успешным, например,
источник
Вот что я делаю, если
ansible_user
отличается для «первого запуска» playbook (например, если у вас есть толькоroot
пользователь, и вы собираетесь настроить нового пользователя с ключом SSH):ansible_pass
как если бы вы использовали пароли для входа (не забудьте использовать Vault), это должен быть пароль пользователя, которого вы используете для «первого запуска» книги.ansible_user
имя пользователя, которого вы хотите использовать после первого запуска, когда пользователи правильно настроены на сервере.ansible_user_first_run
Например, установите переменную для пользователя, которого вы собираетесь использовать для «первого запуска» книгиroot
.ignore_errors
иchanged_when: False
ansible_user
значениеansible_user_first_run
Вот код:
Примечание: стоит установить, так
transport = ssh
как paramiko может неожиданно не войти в систему на сервере в некоторых конфигурациях (например, когда сервер настроен так, чтобы не принимать пароли, и вы сначала пытаетесь ввести ключ, а затем пароль ... странно!) Кроме того, SSH транспорт быстрее, так что оно того стоит.Примечание: если вы используете этот метод, вам нужно указать
gather_facts: false
в файле определения playbook, чтобы задачи по сбору / установке фактов не запускались автоматически до того, как вы приступите к тестированию паролей. Если вам нужен какой-либо из возможных фактов, вам необходимо явно вызватьsetup
свою роль, прежде чем получить доступ к любым данным, обычно доступным в таких местах, какansible_devices
, и т. Д. Один из хороших способов сделать это - вызватьsetup
с помощьюwhen
пункта, который проверяет, является ли факт, который вы используете, пуст или нет, прежде чем вы называете его в своей роли.источник
gather_facts: no
чтобы прекратить пытаться подключиться при запуске playbook :)Вы можете использовать
--ask-pass
при запуске ansible-playbook.Для других заданий, которые вы задали, это возможно различными способами, например, с помощью модуля копирования.
Отключение входа в систему root также может быть сделано, например. шаблонизируя
sshd_conf
или вставляя строку в файл conf.источник