Настройте аутентификацию нового пользователя и ключа SSH. использование Ansible в Ubuntu 18.04
На этой странице
- Предпосылки
- Что будем делать?
- Шаг 1. Настройка Ansible Control Machine
- Шаг 2. Определите пользователя и ключ SSH
- Шаг 3. Создайте новый инвентарь
- Шаг 4. Создание Ansible Playbook
- Шаг 5. Запустите Playbook
- Шаг 6. Тестирование
- Справочник
Ansible — это простой инструмент автоматизации, который автоматизирует развертывание программных приложений, подготовку облака и управление конфигурацией. Это инструмент оркестрации серверов, который помогает вам управлять и контролировать большое количество серверных узлов из единого места, называемого Control Machines. Ansible был создан Майклом ДеХааном в 2012 году и написан на Python и Powershell.
В этом руководстве мы узнаем, как развернуть нового пользователя и включить аутентификацию на основе ключа SSH с помощью инструмента автоматизации Ansible. Мы также узнаем, как настроить Ansible Control Machine, а также как написать простой ansible playbook.
Предпосылки
- 2 или более серверов Ubuntu 18.04
- 10.0.15.10 управляющая машина
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
Что мы будем делать?
- Настройка Ansible Control Machine
- Определить пользователя и ключ SSH
- Создать файл инвентаризации
- Создание Ansible Playbook
- Развертывание сервера с помощью Playbook
- Тестирование
Шаг 1 — Настройка Ansible Control Machine
В этом руководстве мы будем использовать серверы Ubuntu 16.04 в качестве Ansible Machine Control и хостов Ansible. Первый шаг, который нам нужно сделать, это настроить управляющую машину.
Мы установим python и ansible на машину управления ansible, выполнив следующую команду.
sudo apt install python ansible -y
После завершения установки мы добавим нового системного пользователя.
Мы добавим нового пользователя с именем provision для выполнения подготовки сервера с помощью Ansible.
Добавьте нового пользователя и дайте пользователю пароль.
useradd -m -s /bin/bash provision
passwd provisionТеперь добавьте пользователя для sudo без пароля, создав новый файл конфигурации в /etc/sudoers.d/ с помощью приведенной ниже команды.
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision
Создан новый пользователь, и теперь он может использовать sudo без пароля.
Шаг 2. Определите пользователя и ключ SSH
На этом шаге мы определим пользователя для доступных хостов. Этот пользователь будет автоматически создан ansible, поэтому нам просто нужно определить имя пользователя, пароль и открытый ключ ssh.
Для каждого сервера (ansi01 и ansi02) мы создадим нового пользователя с именем provision и паролем secret01. И нам нужно зашифровать пароль secret01 с помощью команды mkpasswd.
Зашифруйте пароль secret01 с помощью приведенной ниже команды.
mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'Примечание:
Убедитесь, что пакет whois установлен в системе, или вы можете установить его с помощью следующей команды.
sudo apt install whois -y
И вы получите зашифрованный пароль SHA-512.
Далее мы сгенерируем новый ssh-ключ.
Войдите в систему как пользователь Provision и сгенерируйте ключ ssh с помощью команды ssh-keygen.
su - provision
ssh-keygen -t rsaТеперь пользователь и пароль определены, а ключ ssh создан (находится в каталоге .ssh).
Шаг 3 — Создайте новый инвентарь
На этом шаге мы определим файлы инвентаризации для всех хостов сервера.
Войдите в систему как пользователь подготовки и создайте новый каталог для проекта.
su - provision
mkdir -p ansible01/Перейдите в каталог ansible01 и создайте новый файл инвентаризации inventory.ini с помощью vim.
cd ansible01/
vim inventory.iniВставьте туда следующую конфигурацию.
[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22Сохранить и выйти.
Теперь создайте новый файл конфигурации ansible ansible.cfg.
vim ansible.cfg
Вставьте туда следующую конфигурацию.
[defaults]
inventory = /home/provision/ansible01/inventory.iniСохранить и выйти.
Файл инвентаризации ansible создан, и наши сценарии ansible будут расположены под пользователем предоставления в каталоге ansible01.
Шаг 4 — Создайте Ansible Playbook
Ansible Playbook — это набор инструкций, которые вы отправляете для запуска на одном или группе серверов. Он представляет собой ansible-provisioning, где автоматизация определяется как задачи, и все задания, такие как установка пакетов, редактирование файлов, будут выполняться модулями ansible.
На этом шаге мы создадим новый ansible playbook для развертывания нового пользователя, развертывания ключа ssh и настройки службы ssh.
Прежде чем мы создадим новую доступную книгу воспроизведения, мы просканируем все отпечатки пальцев сервера с помощью команды ssh-keyscan, как показано ниже.
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hostsОтпечатки этих серверов будут храниться в файле .ssh/known_hosts.
Примечание:
Если у вас много серверных узлов, вы можете сохранить список хостов, а затем вручную отсканировать отпечаток ключа ssh с помощью сценария bash, как показано ниже.
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
doneЗатем создайте ansible playbook с именем deploy-ssh.yml с помощью vim.
vim deploy-ssh.yml
Вставьте туда следующую ansible playbook.
---
- hosts: all
vars:
- provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
gather_facts: no
remote_user: root
tasks:
- name: Add a new user named provision
user:
name=provision
password={{ provision_password }}
- name: Add provision user to the sudoers
copy:
dest: "/etc/sudoers.d/provision"
content: "provision ALL=(ALL) NOPASSWD: ALL"
- name: Deploy SSH Key
authorized_key: user=provision
key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
state=present
- name: Disable Password Authentication
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentication no"
state=present
backup=yes
notify:
- restart ssh
- name: Disable Root Login
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notify:
- restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restartedСохранить и выйти.
В сценарии playbook:
- мы создаем сценарий playbook deploy-ssh.yml, который будет применяться на всех серверах, определенных в файле inventory.ini.
- мы создаем переменную ansible provision_password, содержащую зашифрованный пароль для нового пользователя.
- Установите для Ansible-фактов значение no.
- Определите пользователя root как удаленного пользователя для выполнения задач автоматизации.
- Мы создаем новые задачи для добавления нового пользователя, добавляем пользователя в sudoers и загружаем ключ ssh.
- Мы создаем новые задачи для настройки служб ssh, отключения входа в систему root и отключения аутентификации по паролю. Задачи по настройке ssh вызовут перезагрузку обработчиков ssh.
- Мы создаем обработчик для перезапуска службы ssh.
Шаг 5 — Запустите Playbook
Войдите в систему как пользователь provision и перейдите в каталог ansible01.
su - provision
cd ansible01/Теперь запустите playbook deploy-ssh.yml, используя команду, как показано ниже.
ansible-playbook deploy-ssh.yml --ask-pass
Введите пароль root, и вы получите результат, как показано ниже.
Все задачи по развертыванию нового пользователя и ключа ssh успешно выполнены.
Шаг 6 — Тестирование
Протестируйте с помощью команды ansible.
ansible webserver -m ping
ansible webserver -m shell -a idТеперь вы получите зеленые сообщения, как показано ниже.
Теперь мы можем управлять этими серверами ansi01 и ansi02 с помощью Ansible, а пользователь предоставления будет пользователем по умолчанию для Ansible.
Проверка подключения к серверам
ssh 10.0.15.21
ssh 10.0.15.22И вы будете подключены к каждому серверу с использованием файла ключа по умолчанию .ssh/id_rsa и с использованием предоставления пользователя.
Развертывание нового пользователя и ssh-ключа с помощью ansible успешно завершено.
Ссылка
- http://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html