Предпосылки
Если вы хотите попробовать примеры, обсуждаемые в этой статье,
1) На вашем компьютере должен быть установлен Ansible.
2) У вас должен быть хотя бы хост Ubuntu / Debian, к которому вы можете подключиться из Ansible.
На LinuxHint есть много статей, посвященных установке Ansible. Вы можете проверить их, если необходимо установить необходимые программы в вашей системе.
Вам также понадобится sshpass установлен на вашем компьютере, где у вас должен быть установлен Ansible. Я покажу вам, как установить sshpass на Ubuntu / Debian и CentOS / RHEL в этой статье. Не волнуйтесь, если в вашей системе еще не установлены эти программы.
Установка sshpass в Ubuntu / Debian
Программа sshpass доступен в официальном репозитории пакетов Ubuntu / Debian. Вы можете легко установить эту программу на свой компьютер.
Сначала обновите кеш репозитория пакетов APT с помощью следующей команды:
$ sudo подходящее обновление
Теперь установите sshpass с помощью следующей команды:
$ sudo apt install sshpass -y
sshpass теперь должен быть установлен.
Установка sshpass на CentOS 8 / RHEL 8
sshpass доступен в репозитории EPEL CentOS 8 / RHEL 8. У вас должен быть включен репозиторий EPEL для установки sshpass.
Сначала обновите кеш репозитория пакетов DNF с помощью следующей команды:
$ sudo dnf makecache
Затем установите пакет репозитория EPEL с помощью следующей команды:
$ sudo dnf install epel-release -y
Теперь должен быть установлен пакет репозитория EPEL и должен быть включен репозиторий EPEL.
Снова обновите кеш репозитория пакетов DNF, как показано ниже:
$ sudo dnf makecache
Установить sshpass с помощью следующей команды:
$ sudo dnf установить sshpass -y
sshpass должен быть установлен.
Настройка каталога проектов Ansible
Прежде чем мы продолжим, было бы неплохо создать структуру каталогов проекта, чтобы все было немного организовано.
Чтобы создать каталог проекта sshpass / и все необходимые подкаталоги (в вашем текущем рабочем каталоге), выполните следующую команду:
$ mkdir -pv sshpass / файлы, пьесы
Перейдите в каталог проекта следующим образом:
$ cd sshpass /
Создать хозяева файл инвентаризации, как показано ниже:
$ nano хосты
Добавьте IP-адрес или DNS-имя вашего хоста в файл инвентаризации.
По завершении этого шага сохраните файл, нажав
Создайте файл конфигурации Ansible в каталоге проекта, как показано ниже:
$ нано доступный.cfg
Теперь введите следующие строки в анзибль.cfg файл.
По завершении этого шага сохраните файл, нажав
Тестирование входа по SSH на основе пароля в Ansible
Затем попробуйте пропинговать хосты в файле инвентаризации, как показано ниже:
$ ansible all -u shovon -m pingПРИМЕЧАНИЕ: Здесь -ты опция используется, чтобы указать ansible, какой пользователь должен войти в систему как. В этом случае это будет пользователь Шовон. С этого момента замените это имя пользователя своим на протяжении всей демонстрации.
Как видите, я не могу войти на хост и выполнить какие-либо команды.
Чтобы заставить Ansible запрашивать пароль пользователя, запустите анзибль команда с -спросить-пройти аргумент следующим образом:
$ ansible all -u shovon --ask-pass -m ping
Как видите, Ansible запрашивает пароль SSH пользователя. Теперь введите свой пароль SSH (пароль для входа в систему) и нажмите
Хост можно пропинговать следующим образом:
SSH-вход Ansible на основе пароля для Playbooks
Вы можете использовать SSH-вход на основе пароля при запуске Ansible playbooks. Давайте посмотрим на пример.
Сначала создайте новую пьесу askpass1.ямл в пьесы / каталог, а именно:
$ nano playbooks / askpass1.ямл
Введите следующие строки в askpass1.ямл файл playbook:
- хосты: всепользователь: shovon
задачи:
- name: пинговать все хосты
пинг:
- имя: Распечатать сообщение
отлаживать:
msg: 'Все готово'
По завершении этого шага сохраните файл, нажав
Запустить askpass1.ямл playbook, как показано ниже:
Плейбуки $ ansible-playbook / askpass1.ямл
Как видите, я не могу подключиться к хосту. Как видите, это потому, что я не запускал Ansible-playbook команда с -спросить-пройти вариант.
Запустить askpass1.ямл пьеса с -спросить-пройти вариант, а именно:
$ ansible-playbook -ask-pass playbooks / askpass1.ямл
Как видите, Ansible запрашивает пароль SSH. Введите свой пароль SSH и нажмите
Пособие askpass1.ямл теперь должен работать успешно.
Ansible sudo пароль для входа в Playbooks
В -спросить-пройти опция запросит только пароль для входа в SSH. Что делать, если вы также хотите ввести пароль sudo? Вы увидите, как это сделать, на следующих шагах.
Сначала создайте новую пьесу askpass2.ямл в пьесы / каталог, а именно:
Плейбуки $ nano / askpass2.ямл
Введите следующие строки в askpass2.ямл файл.
- хосты: всепользователь: shovon
становятся истинными
задачи:
- имя: Установить пакет apache2
apt:
имя: apache2
состояние: последнее
- имя: Убедитесь, что служба apache2 запущена
услуга:
имя: apache2
состояние: запущено
enabled: True
- имя: Копировать индекс.html файл на сервер
копия:
src:… / files / index.html
место назначения: / var / www / html / index.html
режим: 0644
владелец: www-data
группа: www-data
Здесь я использовал команду становятся истинными чтобы сказать Ansible запустить эту пьесу с привилегиями sudo. Когда вы закончите с этим шагом, сохраните askpass2.ямл файл, нажав
Создать индекс.html файл в файлы / каталог, а именно:
$ nano файлы / индекс.html
Введите следующие коды HTML в поле индекс.html файл:
Привет мир
Оно работает
По завершении этого шага сохраните файл, нажав
Вы можете запустить askpass2.ямл пьеса с -спросить-пройти вариант, а именно:
$ ansible-playbook --ask-pass playbooks / askpass2.ямл
Затем вам будет предложено ввести пароль SSH, как и раньше.
Но playbook по-прежнему может не работать, даже если вы предоставите пароль SSH. Причина в том, что вы должны указать Ansible запрашивать пароль sudo, а также пароль SSH.
Вы можете указать Ansible запросить пароль sudo с помощью -спросить-стать-передать вариант при запуске playbook, как показано ниже:
$ ansible-playbook --ask-pass --ask-стать-pass playbooks / askpass2.ямл
Теперь Ansible запросит у вас пароль SSH.
Затем Ansible запросит у вас пароль sudo. Если ваш пароль sudo совпадает с паролем SSH (что наиболее вероятно), оставьте его пустым и нажмите
Как видите, playbook успешно запустился.
Настройка автоматического входа по SSH на основе пароля и входа по паролю sudo
Возможно, вы захотите использовать SSH на основе пароля и вход в систему sudo, но не хотите вводить пароль SSH и пароль sudo каждый раз, когда вы запускаете playbook. Если это так, то этот раздел для вас.
Чтобы использовать SSH-вход на основе пароля и вход в систему sudo без запроса паролей, все, что вам нужно сделать, это добавить ansible_ssh_pass а также ansible_become_pass переменные хоста или групповые переменные в вашем файле инвентаризации.
Сначала откройте хозяева файл инвентаризации, как показано ниже:
$ nano хосты
Если у вас есть несколько хостов в вашем файле инвентаризации и каждый из хостов имеет разные пароли, добавьте ansible_ssh_pass а также ansible_become_pass переменные как переменные хоста (после каждого хоста) следующим образом.
Обязательно замените секрет с вашим SSH и паролем sudo.
Если все или некоторые хосты имеют одинаковый пароль, вы можете добавить ansible_ssh_pass а также ansible_become_pass переменные как групповые переменные, как показано в примере ниже.
Здесь у меня только один хост, поэтому я добавил ansible_ssh_pass а также ansible_become_pass переменные для все группа (все хосты в файле инвентаризации). Но вы можете добавить эти переменные и для других конкретных групп.
Как только вы закончите добавлять ansible_ssh_pass а также ansible_become_pass переменные в хозяева файл инвентаря, сохраните хозяева файл инвентаря, нажав
Теперь вы можете запустить askpass2.ямл playbook, как показано ниже:
Плейбуки $ ansible-playbook / askpass2.ямл
Как видите, playbook успешно запустился, хотя не запрашивал пароль SSH или пароль sudo.
Итак, вот как вы используете sshpass для SSH на основе пароля и входа sudo в Ansible. Спасибо, что прочитали эту статью!