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

Использование пула паролей / ключей в Ansible

Я хотел бы запускать определенные задачи на группе серверов через Ansible, но каждый сервер будет аутентифицироваться с помощью другого ключа или пароля (на самом деле: у меня есть несколько паролей и ключей, и каждый из них следует попробовать при входе в систему).

Есть ли в Ansible функция, которая позволяет использовать пул паролей и ключей для аутентификации (я не знаю, какой ключ / пароль соответствует какому хосту)? В документация по удаленному подключению не упоминает ничего подобного, но может быть решение, которое явно не указано в документации.

Есть ли в Ansible функция, которая позволяет использовать пул паролей и ключей для аутентификации (я не знаю, какой ключ / пароль соответствует какому хосту)?

Да.

Парольная аутентификация

Чтобы передать пароль для входа на хост, используйте ansible_ssh_pass переменная. Вы можете установить это для отдельных хостов в вашем файле инвентаризации или использовать host_vars или group_vars по мере необходимости.

Например, вы можете настроить файл инвентаря следующим образом:

[master]
my-managed-host ansible_ssh_pass=MySecretPassword

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

Лучшая альтернатива - указать пароль для каждого хоста в файле переменных хоста в host_vars. В файле $PLAYBOOK_DIR/host_vars/my-managed-host (или действительно, /etc/ansible/host_vars/my-managed-host) добавьте строку для ansible_ssh_pass:

---
ansible_ssh_pass: MySecretPassword

С помощью host_vars или group_vars имеет то преимущество, что вы можете использовать ansible-vault создать эти файлы и зашифровать их в состоянии покоя, не оставляя секретов в виде обычного текста. При вызове Ansible передайте --ask-pass-vault параметр, позволяющий расшифровать хранилище и прочитать пароли.

Этот подход в равной степени применим к group_vars, который работает, когда для логической группы машин применяется один пароль. Есть дополнительные параметры, которые вы можете использовать для указания пароля sudo, если он также отличается для разных учетных записей на нескольких машинах.

Ключ аутентификации

Ключ аутентификации намного проще. Помните, что современные версии Ansible используют внутренние SSH-соединения под поверхностью (подробности в Модуль SSH), поэтому вам просто нужно настроить свою среду, как если бы вы планировали использовать SSH для нескольких устройств с разными ключами.

это должен "просто работать", если вы добавите все соответствующие ключи к своему агенту SSH, чтобы они кэшировались и разблокировались в памяти; например, введите команду ssh-add $HOME/.ssh/super-secret-key-file.

Однако вы можете также дать несколько советов по простоте использования вне среды Ansible. Добавьте строки для каждого хоста в свой $HOME/.ssh/config файл, ссылаясь на соответствующий ключ для этого хоста:

Host my-key-login-host
    User myusername
    HostName my.machine.corp.com
    IdentityFile $HOME/.ssh/super-secret-key-file

Убедитесь, что эта конфигурация работает, введя команду ssh my-key-login-host и проверка возможности подключения к оболочке на удаленном компьютере. Если это так, вы можете просто добавить «my-key-login-host» в свой инвентарь Ansible.

Ansible также поддерживает ссылки на ключевые файлы в инвентарных или переменных файлах, если вы не хотите использовать агент SSH. Посмотреть вариант ansible_ssh_private_key_file.