Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


Info
titleДанная статья применима к:
  • ОС ОН Орёл 2.12

Введение

Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.

  • Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
  • Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
  • Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.

Описание стенда

Сервер: 10.0.2.120 master.astra.lan

Клиент: 10.0.2.121 agent1.astra.lan

На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.

Установка

Puppet

Предварительная настройка

Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Укажем для каждой машины hostname.

Для сервера команда будет иметь следующий вид:

Command

sudo hostnamectl set-hostname master.astra.lan

Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (10.0.2.120) и его имени хоста (master.astra.lan).
Для этого на сервере и на клиенте выполним команду:

Command

echo -e '10.0.2.120\tmaster.astra.lan' | sudo tee -a /etc/hosts

Настройка локалей на сервере.

Проверим наличие локали en_US.utf8 выполнив команду:

Command
locale -a | grep en_US.utf8

Если локали нет, то выполним для её добавления следующие команды

Command

echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
sudo locale-gen

Или выберем нужные локали, включая en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:

Command
sudo apt update
sudo dpkg-reconfigure locales

2.1.2 Установка Puppet Server

Для установки выполнить на сервере следующие команды:

Command

sudo apt update
sudo apt install puppetserver

Для коммуникации Puppet Server использует 8140 порт. Если включен межсетевой экран, то нужно разрешить коммуникации через этот порт. Для сетевого экрана ufw:

Command
sudo ufw allow 8140

Далее разрешим автоматический запуск  Puppet Server и запустим его:

Command

sudo systemctl enable puppetserver
sudo systemctl start puppetserver

Проверим статус сервиса:

Command
sudo systemctl status puppetserver

2.1.3 Установка Puppet Agent на клиентском компьютере

Для установки агента на клиентском компьютере выполним на компьютере-агенте следующие команды:

Command

sudo apt update
sudo apt-get install puppet-agent

Отредактируем файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:

Info
server = master.astra.lan
show_diff = true

Запустим службу Puppet Agent и добавим её в автозагрузку:

Command
sudo systemctl enable puppet
sudo systemctl start puppet

2.1.4 Подписание сертификатов

При первом запуске служба Puppet Agent отправляет на Puppet Server запрос на подпись сертификата.

Для просмотра списка запросов на подпись сертификата выполним на сервере следующую команду:

Command

sudo /opt/puppetlabs/bin/puppetserver ca list

Requested Certificates: agent1.astra.lan (SHA256) F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E

В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента agent1.astra.lan. Подпишем сертификат:

Command

sudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan

Successfully signed certificate request for agent1.astra.lan

Для проверки работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:

Command# Останавливаем службу
sudo systemctl stop puppet
# Тестируем службу
sudo /opt/puppetlabs/bin/puppet agent --test

Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent1.astra.lan
Info: Certificate Request fingerprint (SHA256): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
Info: Downloaded certificate for agent1.astra.lan from puppet
Info: Using configured environment 'production'
Info: Retrieving pluginfacts Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for agent1.astra.lan
Info: Applying configuration version '1568370748'
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml Notice: Applied catalog in 0.02 seconds

# Повторно запускаем службу
sudo systemctl start puppet

2.2 Ansible

Для установки Ansible выполним



Warning
Развертывание службы Foreman следует выполнять на отдельном сервере, без работающих служб, использующих web-сервер apache2. В частности, не следует применять настоящую инструкция на контроллерах домена FreeIPA (см. Контроллер ЕПП FreeIPA в Astra Linux).


Введение

Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.

  • Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает web-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
  • Puppet - инструмент управления конфигурацией, позволяющий системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой. Требует установки агентского ПО на управляемые компьютеры;
  • Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев. Не требует установки агентского ПО на управляемые компьютеры;

Описание стенда

Сервер: 10.0.2.120 master.astra.lan

Клиент: 10.0.2.121 agent1.astra.lan

Далее подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена пользователей разные то нужно соответствующим образом изменить команды передачи ключей SSH.

На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.

Info
На сервере должно быть установлено не менее 3ГБ оперативной памяти.


Установка Puppet

Настройка сервера

Имя и адрес сервера

Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Для сервера используем имя master.astra.lan, и команда назначения имени будет иметь следующий вид (команда выполняется на сервере):

Command

sudo hostnamectl set-hostname master.astra.lan

Осуществить настройку каждой машины через файл /etс/hosts, для чего внести в файл указание IP-адреса Puppet Server (10.0.2.120) и его имён (master.astra.lan, master и puppet). В итоге файл /etc/hosts на сервере должен выглядеть примерно так:

Code Block
127.0.0.1 localhost
10.0.2.120 master.astra.lan master puppet
10.0.2.121 agent1.astra.lan agent1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Подразумевается, что серверу назначен статический IP-адрес 10.0.2.120, а клиенту - 10.0.2.121.

Коррекция региональных настроек (locales) на сервере.

Проверить наличие региональной настройки en_US.utf8 выполнив команду:

Command
locale -a | grep en_US.utf8

Если региональной настройки en_US.utf8 нет, то добавить её, выполнив следующие команды

Command

echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
sudo locale-gen

Или можно выбрать нужные региональные настройки, включая региональную настройку en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:

Command
sudo apt update
sudo dpkg-reconfigure locales

Установка Puppet Server

Warning
При работе в Astra Linux Special Edition x.7.0 и x.7.1 подключить расширенный репозиторий, для обновлений выпущенный ранее обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) также подключить компонент расширенного репозитория astra-ce (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования).

Для установки выполнить на сервере следующие команды:

Command

sudo apt update
sudo apt install ansible

Отредактируем файл /etc/ansible/hosts, добавив секцию agents, в котрой укажем имя (agent1.astra.lan) и IP-адрес (10.0.2.121) клиентской машины:

Command
echo -e "[agents]\n agent1.astra.lan ansible_ssh_host=10.0.2.121" | sudo tee -a /etc/ansible/hosts

Ansible использует подключение ssh по ключу, поэтому сгенерируем его:

Command
ssh-keygen -t rsa -b 4096

После создания ключа передадим его на нужные узлы:

Command
ssh-copy-id user@10

openjdk-11-jre-headless puppetserver

Указание пакета в команде установки пакета openjdk-11-jre-headless необходимо для того, чтобы он обновился из расширенного репозитория если был установлен ранее.

Для коммуникации Puppet Server использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:

Command
sudo ufw allow 8140

Разрешить автоматический запуск  Puppet Server и запустим его:

Command

sudo systemctl enable puppetserver
sudo systemctl start puppetserver

Проверить статус сервиса:

Command
systemctl status puppetserver

Установка Puppet Agent на клиентском компьютере

Имя и адрес клиентского компьютера

Настроить статический IP-адрес сервера (далее - 10.0.2.121

Проверим работу Ansible, выполнив пинг на группу серверов agents)

Задать имя компьютера:

Command
ansible -m ping agents
sudo hostnamectl set-hostname agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}

2.3 Foreman

Для установки пакета Foreman выполним следующие команды:

Command

sudo apt update
sudo apt install foreman-installer

Запустим установщик:

Command

sudo foreman-installer

Preparing installation Done *
Foreman is running at https://master.astra.lan
Initial credentials are admin / NRLJth9ufmAkTsF5 *
Foreman Proxy is running at https://master.astra.lan:8443 *
Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log

Проверим работоспособность foreman-proxy:

Command

sudo curl -k -X GET -H Accept:application/json https://master.astra.lan:8443/features --tlsv1

["httpboot","logs","puppet","puppetca","tftp"]

3. Настройка

3.1 Foreman + Puppet

Откроем в браузере ссылку https://master.astra.lan

Image Removed

В качестве логина и пароля используем initial credentials, которые получили после выполнения установщика.

Перейдем в "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies"), нажмём кнопку "Create Smart Proxy" и введём параметры proxy:

Image Removed

Нажмем на кнопку Применить.

Теперь перейдем в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:

Image Removed

Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах выполнить команду:

Command
sudo systemctl restart puppet

После чего обновить страницу WEB-интерфейса.

3.2 Foreman + Ansible

Установим необходимые плагины:

  • для работы с Ansible: foreman-plugin-ansible, foreman-proxy-plugin-ansible;

  • для запуска Ansible playbooks как запланированные задачи: foreman-plugin-remote-execution, foreman-proxy-plugin-remote-execution-ssh

Command
sudo mkdir -p /var/lib/foreman-proxy
sudo foreman-installer --enable-foreman-plugin-ansible \
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh

Проверим работу связки. Создадим файл cat_hosts.yml со следующим содержимым:

Info
-
    - hosts: all
      become: true
      tasks:
      - name: cat /etc/hosts
        command: cat /etc/hosts
        register: cat_all_hosts
...

Выполним команду:

Command

ansible-playbook cat_hosts.yml -vv

В результате получим следующий вывод:

Info

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [agent1.astra.lan]

TASK [cat /etc/hosts] **********************************************************
changed: [agent1.astra.lan]

PLAY RECAP *********************************************************************
agent1.astra.lan : ok=2 changed=1 unreachable=0 failed=0

Возможные проблемы

При запуске сервиса foreman появляется ошибка:

Info
/usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad)

Для устранения ошибки отредактировать файл /etc/postgresql/9.6/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.

После этого выполнить команду:

Command
sudo systemctl restart postgresql foreman

Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:

Code Block
127.0.0.1 localhost
10.0.2.121 agent1.astra.lan agent1
10.0.2.120 master.astra.lan master puppet

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Можно просто скопировать ранее созданный файл /etc/hosts с сервера.

Установка агента

Для установки агента выполнить на компьютере-агенте следующие команды (при этом будет установлен агент и сервер SSH для удалённого управления агентом):

Command

sudo apt update
sudo apt install puppet-agent ssh

Отредактировать файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:

Code Block
server = master.astra.lan
show_diff = true

Для коммуникации агент, как и Puppet Server, использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:

Command
sudo ufw allow 8140

Добавить службу Puppet Agent в автозагрузку и запустить её:

Command
sudo systemctl enable puppet
sudo systemctl start puppet

Настройка удаленного доступа по протоколу ssh на клиентской машине

Для настройки доступа к клиентской машине по протоколу ssh:

  1. Создать отдельного пользователя с домашним каталогом:

    Command
    sudo useradd -m <имя_пользователя>

    опция -m указывает на необходимость создания домашнего каталога. Далее выбранное имя пользователя должно быть указано реестре клиентских машин на сервере (файле /etc/ansible/hosts);

  2. Задать пароль для этого пользователя:

    Command
    sudo passwd <имя_пользователя>


  3. Разрешить пользователю выполнять команды с использованием sudo. Это можно сделать создав файл /etc/sudoers.d/<имя_пользователя> с указанием привилегии выполнять любые команды без запроса пароля ALL=NOPASSWD:   ALL:

    Command
    echo "<имя_пользователя>   ALL=NOPASSWD:   ALL" | sudo tee -a /etc/sudoers.d/<имя_пользователя> 



Info

Часто предлагаемый для упрощения вариант использования на клиентской машине пользователя root является нежелательным с точки зрения безопасности. При использовании этого варианта помимо задания пароля для пользователя root необходимо разрешить доступ пользователю root через ssh. Для включения доступа root через ssh в файле /etc/ssh/sshd_config раскомментировать параметр PermitRootLogin, изменить его значение на yes и перезапустить службу SSH (команды выполняются на клиентской машине):

Command

sudo passwd root
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd


Подписание сертификатов клиента

При первом запуске клиентская служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата. Для просмотра списка запросов на подпись сертификата выполнить на сервере следующую команду:

Command
Titlesudo /opt/puppetlabs/bin/puppetserver ca list
Requested Certificates: agent1.astra.lan (SHA256) F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E

В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента с именем agent1.astra.lan.

Подписать сертификат:

Command
Titlesudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan
Successfully signed certificate request for agent1.astra.lan

Для проверки правильности работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:

  1. Остановить службу

    Command

    sudo systemctl stop puppet


  2. Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:

    Command
    Titlesudo /opt/puppetlabs/bin/puppet agent --test

    Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
    Info: Creating a new SSL certificate request for agent1.astra.lan
    Info: Certificate Request fingerprint (SHA256): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
    Info: Downloaded certificate for agent1.astra.lan from puppet
    Info: Using configured environment 'production'
    Info: Retrieving pluginfacts Info: Retrieving plugin
    Info: Retrieving locales
    Info: Caching catalog for agent1.astra.lan
    Info: Applying configuration version '1568370748'
    Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml Notice: Applied catalog in 0.02 seconds



  3. Повторно запустить службу:

    Command
    sudo systemctl start puppet


Установка пакетов Ansible и Foreman

Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:

Установить пакет ansible из репозитория:

Command

sudo apt install ansible

Настройка /etc/ansible/hosts

Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents] (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:

Command

echo -e "agents:\n hosts:\n  agent1.astra.lan:\n   ansible_user: <имя_пользователя>" | sudo tee -a /etc/ansible/hosts

В качестве значения параметра ansible_user вместо <имя_пользователя> должно быть указано имя пользователя, созданного на клиенте для удаленного доступа.
В результате файл /etc/ansible/hosts должен иметь следующий вид (пользователь для уделенного доступа - username):

Code Block
agents:
 hosts:
  agent1.astra.lan:
   ansible_user: username


Warning
В примере используется YAML-формат файла. Отступы (количество пробелов в начале строки) должны быть соблюдены. Использование символов табуляции не допускается.

Ansible использует подключение ssh без запроса пароля по ключу, поэтому нужно сгенерировать ключ:

Command

ssh-keygen -f ~/.ssh/id_rsa -N ''


Info
Ключ должен быть сгенерирован и передан от имени пользователя, от которого будут выполняться команды ansible. Если команды ansible предполагается выполнять от sudo, то генерировать и передавать ключ следует также от sudo (можно сгенерировать и передать ключи для нескольких пользователей ). 

После создания ключа передать его на нужные узлы, подключаясь к ним от имени пользователя, созданного для удаленного доступа:

Command

ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.astra.lan

Проверить работу Ansible, выполнив пинг на группу серверов agents:

Command
Titleansible -m ping agents
agent1.astra.lan | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Базовая настройка Foreman

Установить пакеты:

В случае, если ОС была установлена без графической оболочки, установить пакет shared-mime-info, команда:

Command
sudo apt install shared-mime-info

Установить пакет foreman-installer:

Command
sudo apt install foreman-installer


Warning
Перед выполнением дальнейших действий следует проверить, что в файле /etc/debian_version указано значение 9.0, и, если там указано иное значение, заменить его на 9.0.

Запустить установщик:
Warning

После установки в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс.В дальнейшем пароль возможно изменить с помощью команды:

Command
sudo foreman-rake permissions:reset username=admin password=<новый_пароль>



Command
Titlesudo foreman-installer
Preparing installation Done *
Foreman is running at https://master.astra.lan
Initial credentials are admin / NRLJth9ufmAkTsF5 *
Foreman Proxy is running at https://master.astra.lan:8443 *
Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log


Warning
В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в web-интерфейс, его рекомендуется запомнить чтобы использовать для входа в web-интерфейс.


Проверить работоспособность foreman-proxy:

Command
Titlesudo curl -k -X GET -H Accept:application/json https://master.astra.lan:8443/features --tlsv1

["httpboot","logs","puppet","puppetca","tftp"]

Настройка

Foreman + Puppet

Открыть в браузере ссылку https://master.astra.lan (подтвердить согласие на подключение)

Image Added

В качестве логина и пароля использовать имя admin и автоматически созданный пароль, полученный после выполнения установщика.


Перейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:

Image Added

Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:

Command
sudo systemctl restart puppet

После чего обновить страницу web-интерфейса.

Убедиться, что в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") имеется отображение созданного по умолчанию proxy. Если proxy не создан, то:

  • Перейти в "Администратор" - "Местоположения" ("Administer" - "Locations");
    • Выбрать Default location;
    • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
    • Нажать кнопку "Применить" ("Submit");
  • Аналогично "Администратор" - "Организации" ("Administer" - "Organizations");
    • Выбрать Default organization;
    • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
  • Нажать кнопку "Применить" ("Submit");

После выполнения этих шагов в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") появится отображение созданного по умолчанию proxy.

Foreman + Ansible

Установить необходимые плагины:

  • для работы с Ansible: foreman-plugin-ansible, foreman-proxy-plugin-ansible;

  • для запуска Ansible playbooks как запланированные задачи: foreman-plugin-remote-execution, foreman-proxy-plugin-remote-execution-ssh

Command
sudo foreman-installer --enable-foreman-plugin-ansible \
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh

Создать и скопировать ключ для работы каждого клиента с сервера (команда выполняется на сервере от имени пользователя foreman-proxy, подключение выполняется от имени пользователя для удаленного доступа):

Command

sudo -u foreman-proxy ssh-keygen -f ~foreman-proxy/.ssh/id_rsa_foreman_proxy -N ''
sudo -u foreman-proxy ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan


Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами (при этом нужно будет указать команду или сценарий для выпонения на удалённой машине):

  1. Через список узлов (хостов):
    1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
    2. выбрать необходимые узлы;
    3. нажать "Действия" -> "Scheduled Remote Job";
  2. Через страницу узла:
    1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
    2. перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
  3. Через список заданий:
    1. открыть страницу "Шаблоны заданий"
    2. напротив нужного шаблона нажать "Выполнить"

Роли ansible могут быть импортированы из смарт-прокси. Для этого необходимо:

  1. перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
  2. выбрать источник импорта из выпадающего меню справа.

Настройка интеграции ansible и foreman

Для настройки передачи данных из ansible в foreman:

  1. При работе в Astra Linux Common Edition 2.12 (и в любых ОС с отсутствующей версией python2) в настройки ansible (файл /etc/ansible/hosts) добавить директиву:

    Code Block
    ansible_python_interpreter: /usr/bin/python3
    Например
    agents:
     hosts:
      client.astra.lan:
       ansible_user: vagrant
      client2.astra.lan: # ALSE 1.7
       ansible_user: vagrant
      orel.astra.lan: # Orel 2.12.44
       ansible_user: vagrant
       ansible_python_interpreter: /usr/bin/python3

    Иначе при добавлении хоста с помощью ansible (см. ниже) будет возникать ошибка:

    Code Block
    "module_stderr": "Shared connection to orel.astra.lan closed.\r\n",
        "module_stdout": "/bin/sh: /usr/bin/python: Нет такого файла или каталога\r\n",
        "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",


  2. В файл /etc/ansible/ansible.cfg:
    1. в секцию [defaults] добавить строки:

      Code Block
      bin_ansible_callbacks = True
      callback_whitelist = foreman

      команда для добавления указанных строк:

      Command
      sudo sed -i "/\[defaults\]/a bin_ansible_callbacks = True\ncallback_whitelist = foreman" /etc/ansible/ansible.cfg


    2. Добавить секцию [callback_foreman] следующего вида:

      Code Block
      [callback_foreman]
      url = https://`hostname`
      ssl_cert = /etc/puppetlabs/puppet/ssl/certs/master.astra.lan.pem
      ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/master.astra.lan.pem
      verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem
      

      команда для добавления:

      Command
      echo "[callback_foreman]
      url = https://`hostname`
      ssl_cert = /etc/puppetlabs/puppet/ssl/certs/master.astra.lan.pem
      ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/master.astra.lan.pem
      verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem" | sudo tee -a  /etc/ansible/ansible.cfg

      Параметры для добавления секции можно скопировать из одноименной секции файла /etc/foreman-proxy/ansible.cfg;

  3. В графическом интерфейсе foreman добавить хост, с которого будет приниматься информация: "Администратор" - "Параметры" - закладка "Безопасность и проверка подлинности" - "Trusted hosts":List of hostnames, IPv4, IPv6 addresses or subnets to be trusted in addition to Smart Proxies for access to fact/report importers and ENC output. Имя хоста указать в квадратных скобках (синтаксис списка python);

  4. Для проверки работы выполнить команду:

    Command
    sudo ansible -m setup localhost

    После выполнения команды в графическом интерфейсе foreman в списке хостов должен появиться новый хост (для команды выше - localhost). Если в команде указать имя клиента, например:

    Command
    sudo ansible -m setup client.example.com

    то в список хостов добавится хост с указанным именем (для команды выше - client.example.com)

Массовая настройка беспарольного доступа SSH

Warning
Далее приводятся примеры команд, выполняющихся без проверки и подтверждения подлинности. Это небезопасно, но может быть необходимо для создания автоматических сценариев массового развертывания и настройки клиентских машин.

Автоматическую передачу паролей для подключения клиенту ssh и инструменту передачи ключей ssh-copy-id обеспечивает инструмент sshpass (пакет sshpass). Пакет может быть установлен командой:

Command
sudo apt install sshpass

Для использования инструмента:

  1. Создать файл для хранения паролей:

    Command
    touch <имя_файла>


  2. Запретить чтение файла всем, кроме владельца:

    Command
    chmod 600 <имя_файла>


  3. Записать в файл пароль, который будет использоваться для подключения;
  4. Команды передачи ключей, приведенные выше, использовать в виде:

    Command
    sshpass -f <имя_файла> ssh-copy-id -i ~/.ssh/id_rsa <имя_пользователя>@agent1.`hostname -d` -o StrictHostKeyChecking=no

    или

    Command
    sudo -u foreman-proxy sshpass -f <имя_файла> ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy <имя_пользователя>@agent1.astra.lan -o StrictHostKeyChecking=no

    где:

    опция -f <имя_файла> указывает из какого файла брать пароль для подключения;
    опция -o StrictHostKeyChecking=no отключает запрос подтверждения подлинности сервера и разрешает автоматическую регистрацию сервера как известного;

Другие возможности инструмента sshpass см. в справке:

Command
man sshpass


Пример использования

См. Настройки служб времени с помощью Ansible и Puppet.

Возможные проблемы

Проблема:

При запуске сервиса foreman появляется ошибка:

Info
/usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad)

Решение:

Отредактировать файл /etc/postgresql/*/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.

После этого выполнить команду:

Command
sudo systemctl restart postgresql foreman


Проблема:

Не стартует puppetserver.service. В /var/log/syslog сообщения:

puppetserver[10217]: Execution error (Error) at puppetlabs.services.master.master-core/validate-memory-requirements! (master_core.clj:1279).
puppetserver[10217]: Not enough available RAM (1 860MB) to safely accommodate the configured JVM heap size of 1 963MB. Puppet Server requires at least 2 159MB of available RAM given this heap size, computed as 1.1 * max heap (-Xmx). Either increase available memory or decrease the configured heap size by reducing the -Xms and -Xmx values in JAVA_ARGS in /etc/sysconfig/puppetserver on EL systems or /etc/default/puppetserver on Debian systems.

Решение:

На сервере должно быть установлено не менее 3ГБ оперативной памяти (как указано в инструкции).