Вход в систему с именем пользователя/паролем (полученным из API) в Ansible playbook

Я пытаюсь справиться со следующей ситуацией в Ansible playbook:

  1. создать сервер через API облачного провайдера
  2. хранить учетные данные root (имя пользователя/пароль) из ответа API
  3. используйте учетные данные root для входа в систему и размещения ключа SSH
  4. настроить новых пользователей, отключить вход в систему root и т. д.

Я могу использовать модули authorized_key и user для шага 4. У меня есть модуль (собственный) для шага 1 и 2. Как мне выполнить шаг 3? Существуют ли какие-либо существующие решения для программного входа в систему с использованием имени пользователя/пароля? Я НЕ хочу давать их через командную строку.

В принципе, я мог бы построить модуль и для этого. В идеале я хотел бы что-то похожее на:

- task: setup SSH
  place_ssh_with_passwd:
    state: present
    key: /path/to/local/key
    path: /root/.ssh/authorized_keys
    user: "{{ server.username }}"
    password: "{{ server.password }}"

person elnygren    schedule 13.07.2015    source источник
comment
Если ничего не получается, вы всегда можете просто запустить локальную задачу и вручную подключиться к хосту со своими учетными данными. Примерно так: - shell: sshpass -p 'password' scp /path/to/local/key [email protected]:/root/.ssh/authorized_keys .   -  person udondan    schedule 13.07.2015


Ответы (2)


Используйте действие add_host, чтобы добавить хост в новую группу и отключить шаблоны ansible_ssh_host, ansible_ssh_user и ansible_ssh_pass с шаблонами Jinja от вашего ответа от облачного провайдера (см. пример в документы). Затем начните новую игру, нацеленную на новую группу, чтобы выполнить размещение ключей и любые другие задачи по настройке, которые вы хотите против нового хоста.

person nitzmahone    schedule 13.07.2015

Я нашел один способ сделать это в той же игре после создания сервера:

 - name: create server
   ...use module, create server and grap password from output...

 - name: add SSH key to server
   shell: "./scp_ssh_key.sh /path/to/key user@host:/path/ {{ passwd }}

Где сценарий оболочки будет примерно таким:

После этого можно было использовать встроенные модули Ansible для настройки пользователей, других ключей и т. д.

person elnygren    schedule 15.07.2015