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
Что мы будем делать?
- Настроить Управляющую машину Ansible
- Определить пользователя и SSH-ключ
- Создать файл инвентаря
- Создать плейбук Ansible
- Развернуть сервер с использованием плейбука
- Тестирование
Шаг 1 - Настройка Управляющей машины Ansible
В этом руководстве мы будем использовать серверы Ubuntu 16.04 в качестве “Управляющей машины” Ansible и хостов ansible. Первый шаг, который нам нужно сделать, это настроить “управляющую машину”.
Мы установим python и ansible на “управляющую машину” ansible, выполнив следующую команду.
sudo apt install python ansible -y
После завершения установки мы добавим нового системного пользователя.
Мы добавим нового пользователя с именем ‘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’.

Примечание:
Если у вас много серверных узлов, вы можете сохранить свой список хостов, а затем вручную просканировать отпечаток 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Теперь вы получите зеленые сообщения, как показано ниже.

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


Развертывание нового пользователя и ssh-ключа с использованием ansible было успешно завершено.
Ссылки
Get new posts in your inbox
No spam. Unsubscribe anytime.