Ansible: как запустить игру с хостами с разными паролями?

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

вот с чего я начал. Пример хозяева:

# legacy and new have different logins (like root and deploy)
[legacy]
serv1
serv2

[new]
serv3
serv4

# different has a different login and password altogether
[different]
serv5

поэтому, чтобы все было просто, у меня изначально была playbook, эквивалентная sudo apt-get update && sudo apt-get upgrade на всех машинах, но из-за другого входа / passwd я создал несколько сценарии для каждого узла. Но теперь я хочу высушить его и смотрю на роли, согласно их документам.

прямо сейчас у меня есть что-то вроде этого. Тест / роли / общие / задачи / основные.файл yml:

---
- name: run apt-get update
  apt: update_cache=yes
- name: run apt-get upgrade
  apt: upgrade=yes

сайт.файл yml:

- name: apply common configuration to all nodes
  hosts: all

  roles:
  - common

Я понимаю, что я действительно могу определить различные логины с ansible_ssh_user=root или ...=deploy в моем файле hosts. Или поместить их в группу vars. Но что мне делать с различными паролями sudo? [legacy] является корнем, поэтому мне не нужно sudo, а [new] и [different] нужно это, и имеют разные пароли. Как мне это сделать? Группа ВАР? Создаю ли я их: test/group_vars/new / some_file_with_a_passwd.yml и test/group_vars/different / some_other_passwd.yml (игнорирование проблем безопасности)?

как работает сайт.YML распознает, что существуют хосты с разными паролями или некоторые хосты без паролей?

Edit для ясности: у меня есть доступ SSH, поэтому я делаю шаг "предварительные задачи" во время игры всегда работайте (я подключаюсь через ключевой доступ и никогда через пароль). Я не беспокоюсь о безопасности, так как это следующий шаг. На данный момент я хочу получить вещь group_vars правильно....Это sudo обострение моих проблем. Например. serv1 sudo может быть root/password1, serv3 sudo: deploy/password2, serv5: anotherdeploy / password3

3 ответов


обычно вы хотите передать пароль sudo в командной строке после запроса пароля Ansible после использования --ask-sudo-password или его короткий псевдоним -K при работе с пользователем, который не имеет беспарольный судо. Это имеет то преимущество, что тогда не записывается в вашей базе кода Ansible нигде, а затем не попадает в систему управления версиями.

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

на ansibe_sudo_pass вместо этого переменная может использоваться для предоставления пароля sudo для пользователя для любого конкретного хоста. Это должны используется только при необходимости пароля sudo, поэтому, если вы предоставляете эту переменную хосту с passwordless sudo, ее следует игнорировать.

поскольку ваша комбинация пользователя / пароля, похоже, полностью разделена группой, а не каждым хостом, тогда логично поместить учетные данные в группа Варс!--5-->.

As указал by nikobelia вы можете рассмотреть вопрос о шифровании конфиденциальных данных, используя что-то вроде хранилище Ансибля, credstash или что-то еще.


хорошо, у вас есть два вопроса здесь:

Как подключиться к разным хостам с разными ключами SSH?

создайте другой файл group_vars для каждого набора хостов и установите учетные данные там.

# group_vars/legacy
---
ansible_ssh_user: myuser
ansible_ssh_key: ~/.ssh/legacy_key.pem

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

как использовать различные учетные данные на хост для привилегий эскалация?

еще раз вставьте их в разные файлы group_vars для каждого набора хостов:

# group_vars/legacy
---
ansible_become_user: root
ansible_become_pass: "{{ vaulted_legacy_password }}"

затем вы можете использовать ключевое слово become: yes для эскалации привилегий, и Ansible будет применять правильные учетные данные для каждой группы. Если вы уже корень, то become ключевое слово просто не будет иметь никакого эффекта.

и потом... смотри, что {{ vaulted_legacy_password }} переменной там?

Лучшая практика, и единственный разумный поступок если вы не когда-либо разделяя этот код, это сделать Ansible Vault файл и сохранить ваши пароли там. Пароль Ansible Vault защищает ваши конфиденциальные переменные и позволяет расшифровывать их во время работы.

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


прежде всего, это не проблема ansible. Вам нужно получить доступ к ключу для подключения к нескольким хостам.

вы можете создать ssh-ключ на пультах ДУ и сохранить локальные все открытые ключи.

добавьте их постоянно SSH config;

vim ~/.ssh / config

IdentitiyFile ~/.ssh/pub.key

Если вам нужно больше об этом можно посмотреть здесь

теперь вы можете получить доступ ко всем хостам без ключа. Наслаждайтесь>!