Мой сценарий Ansible создает машину AWS, а затем пытается подключиться к ней. В зависимости от образа, который я создаю, имя пользователя по умолчанию для входа по SSH — либо «centos», либо «ubuntu» и т. д.
Мой приведенный ниже сценарий завершается с ошибкой wait_for_connection с ошибкой «Отказано в доступе». я предполагать это потому, что ssh использует неправильное имя пользователя; узел управления запускает сценарий как «userx». (Я подтвердил, что мой открытый ключ находится на удаленной машине, а соответствующий закрытый ключ доступен на управляющем узле).
Как мне настроить мой скрипт, чтобы ansible использовал правильное имя пользователя? Я не могу указать его в инвентаре, так как хост только что создан, а имя пользователя зависит от типа экземпляра. Для wait_for_connection нет опции «имя пользователя».
Мой сценарий:
- имя: Создать одну машину AWS
местное_действие:
модуль: ec2
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
имя_ключа: "{{ имя_ключа }}"
group_id: "{{ security_group_id }}"
instance_type: "{{ instance_type }}"
изображение: "{{ ami_id }}"
подождите: правда
регион: "{{ aws_region }}"
зона: "{{ aws_zone}}"
vpc_subnet_id: "{{ aws_vpc_subnet }}"
assign_public_ip: да
регистр: ec2
- имя: Подождите, пока SSH подойдет
делегат_то: "{{ ec2.instances[0].public_dns_name }}"
ждать_для_соединения:
задержка: 60
сон: 15
тайм-аут: 40
Я попытался установить пользователя и ключевой файл прямо перед wait_for_connection, как показано ниже, но ansible по-прежнему сообщает о подключении от имени пользователя NONE, а ключевые файлы не отображают мой ключевой файл (/root/.ssh/mykey):
- имя: Подготовьтесь к подключению к новому узлу
set_fact:
ansible_user: 'центос'
ansible_ssh_private_key_file: "{{ private_key_file }}"
и часть возможного вывода:
<ec2-34-27-194-74.compute-1.amazonaws.com> УСТАНОВИТЬ SSH-СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: Нет
debug1: файл идентификации /root/.ssh/id_ecdsa тип -1