Поиск по сайту:

Настройте аутентификацию нового пользователя и ключа SSH. использование Ansible в Ubuntu 18.04


На этой странице

  1. Предпосылки
  2. Что будем делать?
  3. Шаг 1. Настройка Ansible Control Machine
  4. Шаг 2. Определите пользователя и ключ SSH
  5. Шаг 3. Создайте новый инвентарь
  6. Шаг 4. Создание Ansible Playbook
  7. Шаг 5. Запустите Playbook
  8. Шаг 6. Тестирование
  9. Справочник

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

    Что мы будем делать?

    1. Настройка Ansible Control Machine
    2. Определить пользователя и ключ SSH
    3. Создать файл инвентаризации
    4. Создание Ansible Playbook
    5. Развертывание сервера с помощью Playbook
    6. Тестирование

    Шаг 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