Ansible · 5 min read · Nov 16, 2025

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

Ansible — это простой инструмент автоматизации, который автоматизирует развертывание программного обеспечения, облачное предоставление и управление конфигурацией. Это инструмент оркестрации серверов, который помогает управлять и контролировать большое количество серверных узлов из одного места, называемого “Управляющие машины”. Ansible был создан Майклом ДеХаном в 2012 году и написан на Python и Powershell.

В этом руководстве мы научимся развертывать нового пользователя и включать аутентификацию на основе SSH-ключа с использованием инструмента автоматизации Ansible. Мы также узнаем, как настроить “Управляющую машину” Ansible, а также как написать простой плейбук Ansible.

Предварительные условия

  • 2 или более серверов Ubuntu 18.04 - 10.0.15.10 управляющая-машина
  • 10.0.15.21 ansi01
  • 10.0.15.22 ansi02
  • Привилегии root

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

  1. Настроить Управляющую машину Ansible
  2. Определить пользователя и SSH-ключ
  3. Создать файл инвентаря
  4. Создать плейбук Ansible
  5. Развернуть сервер с использованием плейбука
  6. Тестирование

Шаг 1 - Настройка Управляющей машины Ansible

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

Мы установим python и ansible на “управляющую машину” ansible, выполнив следующую команду.

sudo apt install python ansible -y

Настройка Управляющей машины Ansible

После завершения установки мы добавим нового системного пользователя.

Мы добавим нового пользователя с именем ‘provision’, чтобы выполнять развертывание серверов с помощью Ansible.

Добавьте нового пользователя ‘provision’ и задайте пользователю пароль.

useradd -m -s /bin/bash provision  
passwd provision

Теперь добавьте пользователя ‘provision’ в sudo без пароля, создав новый конфигурационный файл в ‘/etc/sudoers.d/‘ с помощью команды ниже.

echo  -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision

Новый пользователь был создан, и теперь он может использовать sudo без пароля.

Добавить пользователя

Шаг 2 - Определить пользователя и SSH-ключ

На этом шаге мы определим пользователя для хостов ansible. Этот пользователь будет автоматически создан 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 - Создать новый инвентарь

На этом шаге мы определим файлы инвентаря для всех серверных хостов.

Войдите как пользователь ‘provision’ и создайте новый каталог для проекта.

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 будут находиться под пользователем ‘provision’ в каталоге ‘ansible01’.

Шаг 4 - Создать плейбук Ansible

Плейбук Ansible — это набор инструкций, которые вы отправляете для выполнения на одном или группе серверных хостов. Он представляет собой автоматизацию ansible, где автоматизация определяется как задачи, и все работы, такие как установка пакетов, редактирование файлов, будут выполняться модулями ansible.

На этом шаге мы создадим новый плейбук ansible для развертывания нового пользователя, развертывания ssh-ключа и настройки ssh-сервиса.

Перед тем как создать новый плейбук ansible, мы просканируем все отпечатки серверов с помощью команды ssh-keyscan, как показано ниже.

ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts  
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts

Эти отпечатки серверов будут сохранены в файле ‘.ssh/known_hosts’.

Создать плейбук Ansible

Примечание:

Если у вас много серверных узлов, вы можете сохранить свой список хостов, а затем вручную просканировать отпечаток ssh-ключа с помощью bash-скрипта, как показано ниже.

for i in $(cat list-hosts.txt)  
do  
ssh-keyscan $i >> ~/.ssh/known_hosts  
done

Далее создайте плейбук ansible с именем ‘deploy-ssh.yml’ с помощью vim.

vim deploy-ssh.yml

Вставьте следующий плейбук ansible туда.

---  
 - hosts: all  
   vars:  
     - provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'  
  gather_facts: no  
   remote_user: root  
   
   tasks:  
   
   - name: Добавить нового пользователя с именем provision  
     user:  
          name=provision  
          password={{ provision_password }}  
   
   - name: Добавить пользователя provision в sudoers  
     copy:  
          dest: "/etc/sudoers.d/provision"  
          content: "provision  ALL=(ALL)  NOPASSWD: ALL"  
   
   - name: Развернуть SSH-ключ  
     authorized_key: user=provision  
                     key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"  
                     state=present  
   
   - name: Отключить аутентификацию по паролю  
     lineinfile:  
           dest=/etc/ssh/sshd_config  
           regexp='^PasswordAuthentication'  
           line="PasswordAuthentication no"  
           state=present  
           backup=yes  
     notify:  
       - restart ssh  
   
   - name: Отключить вход под root  
     lineinfile:  
           dest=/etc/ssh/sshd_config  
           regexp='^PermitRootLogin'  
           line="PermitRootLogin no"  
           state=present  
           backup=yes  
     notify:  
       - restart ssh  
   
   handlers:  
   - name: перезапустить ssh  
     service:  
       name=sshd  
       state=restarted

Сохраните и выйдите.

В скрипте плейбука:

  • мы создаем скрипт плейбука ‘deploy-ssh.yml’, который будет применяться ко всем серверам, определенным в файле ‘inventory.ini’.
  • мы создаем переменную ansible ‘provision_password’, содержащую зашифрованный пароль для нового пользователя.
  • Установите факты Ansible на ‘no’.
  • Определите пользователя ‘root’ как удаленного пользователя для выполнения автоматизации задач.
  • Мы создаем новые задачи для добавления нового пользователя, добавления пользователя в sudoers и загрузки ssh-ключа.
  • Мы создаем новые задачи для настройки ssh-сервисов, отключения входа под root и отключения аутентификации по паролю. Задачи по настройке ssh будут вызывать обработчики ‘перезапустить ssh’.
  • Мы создаем обработчик для перезапуска ssh-сервиса.

Шаг 5 - Запуск плейбука

Войдите в пользователя ‘provision’ и перейдите в каталог ‘ansible01’.

su - provision  
cd ansible01/

Теперь запустите плейбук ‘deploy-ssh.yml’ с помощью команды, как показано ниже.

ansible-playbook deploy-ssh.yml --ask-pass

Введите свой пароль root, и вы получите результат, как показано ниже.

Запуск плейбука

Все задачи по развертыванию нового пользователя и ssh-ключа были успешно завершены.

Шаг 6 - Тестирование

Проверьте с помощью команды ansible.

ansible webserver -m ping  
ansible webserver -m shell -a id

Теперь вы получите зеленые сообщения, как показано ниже.

Тестирование Ansible

Теперь мы можем управлять этими серверами ‘ansi01’ и ‘ansi02’ с помощью Ansible, и пользователь ‘provision’ будет пользователем по умолчанию для Ansible.

Тестирование соединения с серверами

ssh 10.0.15.21  
ssh 10.0.15.22

И вы будете подключены к каждому серверу, используя ключ по умолчанию ‘.ssh/id_rsa’ и пользователя ‘provision’.

Тестирование соединения с сервером

Другой тест

Развертывание нового пользователя и ssh-ключа с использованием ansible было успешно завершено.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.