Шаг 4 — Запуск ситуативных команд (опционально)
Убедившись, что узел управления Ansible может взаимодействовать с хостами, вы можете запускать на серверах ситуативные команды и плейбуки.
Любая команда, обычно запускаемая на удаленном сервере через SSH, может быть запущена с помощью Ansible на серверах, заданных в файле инвентаризации. Например, вы можете проверить использования дисковых ресурсов всеми серверами с помощью следующей команды:
При желании вы можете заменить выделенную команду любой другой командой.
Также вы можете запускать модули Ansible с помощью ситуативных команд, как мы это делали с модулем при тестировании подключения. Например, мы можем использовать модуль для установки последней версии на все серверы из файла инвентаризации:
Вы можете использовать команды Ansible как для отдельных хостов, так и для групп и подгрупп хостов. Например, вы можете проверить время каждого хоста в группе с помощью следующей команды:
Можно указать несколько хостов, разделив их имена двоеточиями:
Использование нескольких источников инвентаризации
Вы можете одновременно настроить таргетинг на несколько источников инвентаризации (каталоги, сценарии динамической инвентаризации или файлы, поддерживаемые плагинами инвентаризации), задав несколько параметров инвентаризации из командной строки или настроив . Это может быть полезно, когда вы хотите нацеливать обычно отдельные среды, такие как подготовка и производство, одновременно для конкретного действия.
Направьте два источника из командной строки вот так:
ansible-playbook get_logs.yml -i staging -i production
Имейте в виду , что если существуют различные конфликты в товарно -материальных запасов, они разрешаются в соответствии с правилами , описанными в и , Порядок объединения контролируется порядком параметров источника запасов. Если в промежуточном инвентаре определяет , а в производственном инвентаре определяется , книга воспроизведения будет запускаться с . Результат будет обратным, если пьеса была запущена с .
Агрегирование источников ресурсов с помощью каталога
Вы также можете создать инвентаризацию,объединив несколько источников и типов источников в каталоге.Это может быть полезно для объединения статических и динамических хостов и управления ими как одной инвентаризацией.Следующая инвентаризация объединяет источник плагина инвентаризации,скрипт динамической инвентаризации и файл со статическими хостами:
inventory openstack.yml # configure inventory plugin to get hosts from Openstack cloud dynamic-inventory.py # add additional hosts with dynamic inventory script static-inventory # add static hosts and groups group_vars all.yml # assign variables to all hosts
Вы можете нацелить этот каталог на инвентаризацию просто так:
ansible-playbook example.yml -i inventory
Может быть полезно контролировать порядок слияния источников инвентаризации, если есть конфликты переменных или зависимости группы групп от других источников инвентаризации. Инвентаризация объединяется в порядке ASCII в соответствии с именами файлов, поэтому результатом можно управлять, добавляя префиксы к файлам:
inventory 01-openstack.yml # configure inventory plugin to get hosts from Openstack cloud 02-dynamic-inventory.py # add additional hosts with dynamic inventory script 03-static-inventory # add static hosts group_vars all.yml # assign variables to all hosts
Если определяет для группы , определяет , а определяет , книга воспроизведения будет запущена с .
Дополнительные сведения о подключаемых модулях инвентаризации и сценариях динамической инвентаризации см. В модули инвентаризации» и « .
Bind DNS
Инициализируем новую роль:
ansible-galaxy init Bind
* мы назвали нашу роль Bind.
Открываем основной файл для задачи:
vi Bind/tasks/main.yml
Добавляем:
—
— name: Include vars for os family
include_vars:
file: «` ansible_os_family `.yml»
— name: Install Bind on RedHat Family
yum:
name: bind
state: present
when:
ansible_os_family == «RedHat»
notify:
— bind systemd
— name: Install Bind on Debian Family
apt:
name: «` item `»
state: present
loop:
— bind9
— dnsutils
when:
ansible_os_family == «Debian»
notify:
— bind systemd
* в зависимости от типа операционной системы мы подгрузим разные переменные (так как в разных системах имя для bind разное), после чего устанавливаем bind с помощью yum (для систем на базе Red Hat) или apt (Debian)
Обратите внимание, что для систем Debian мы выполняем установку двух пакетов, для перечисления которых используем цикл
Создаем файл с переменными для debian:
vi Bind/vars/Debian.yml
—
service_name : bind9
* с переменной service_name и значением bind9.
Также создаем файл с переменными в роли Bind для систем на базе Red Hat:
vi Bind/vars/RedHat.yml
—
service_name : named
* во втором файле значение для переменной service_name будет named.
Редактируем файл для handlers:
vi Bind/handlers/main.yml
—
— name: bind systemd
systemd:
name: «` service_name `»
enabled: yes
state: started
* после установки bind необходимо разрешить автозапуск сервиса и стартовать его. Имя сервиса подставляется из переменной и зависит от типа операционной системы Linux.
Создаем файл для плейбука:
vi start_role.yml
—
— hosts: test_servers
user: dmosk
become: true
become_method: su
become_user: root
roles:
— Bind
* в данном примере мы запускаем выполнение роли Bind на серверы из группы test_servers.
Запускаем созданный плейбук:
ansible-playbook start_role.yml -kK
Ansible Vault для хранения конфиденциальных данных
Если ваши плейбуки Ansible содержат конфиденциальные данные, такие как пароли, ключи API и учетные данные, важно обеспечить их безопасность с помощью шифрования. Ansible предоставляет ansible-vault для шифрования файлов и переменных
Несмотря на то, что любой файл данных Ansible, а также двоичные файлы, возможно зашифровать изначально, чаще для шифрования переменных файлов, содержащих конфиденциальные данные, используется ansible-vault. После шифрования файла с помощью этого инструмента вы сможете выполнять, редактировать или просматривать его, только предоставив соответствующий пароль, указанный при первом шифровании файла.
Создание нового зашифрованного файла
Вы можете создать новый зашифрованный файл Ansible с помощью:
Эта команда выполнит следующие действия:
- Сначала вам будет предложено ввести новый пароль. Вам нужно будет указывать этот пароль при каждом доступе к содержимому файла, будь то редактирование, просмотр или просто запуск плейбука (или команд с использованием его значений).
- Затем откроется редактор командной строки по умолчанию, чтобы вы могли заполнить файл требуемым содержимым.
- Наконец, когда вы закончите редактирование, ansible-vault сохранит файл как зашифрованный.
Шифрование существующего файла Ansible
Чтобы зашифровать существующий файл Ansible, вы можете использовать следующую команду:
Эта команда запросит у вас пароль, который вам нужно будет вводить при каждом доступе к файлу credentials.yml.
Просмотр содержимого зашифрованного файла
Если вы хотите просмотреть содержимое файла, который ранее был зашифрован с помощью ansible-vault, и вам не нужно изменять его содержимое, вы можете использовать команду:
Она предложит вам указать пароль, который вы выбрали при первом шифровании файла с помощью ansible-vault.
Редактирование зашифрованного файла
Чтобы изменить содержимое файла, который ранее был зашифрован с помощью Ansible Vault, выполните:
Эта команда предложит вам указать пароль, который вы выбрали при первом шифровании файла credentials.yml. После проверки пароля откроется редактор командной строки по умолчанию с незашифрованным содержимым файла, что позволит вам внести нужные изменения. По завершении вы можете сохранить и закрыть файл, как обычно, и обновленное содержимое будет сохранено и зашифровано.
Расшифровка файлов
Если вы хотите навсегда расшифровать файл, ранее зашифрованный с помощью ansible-vault, вы можете сделать это с помощью следующего синтаксиса:
Эта команда предложит вам ввести тот пароль, который использовался при первом шифровании файла. После проверки пароля содержимое файла будет сохранено на диск в виде незашифрованных данных.
Основы инвентаризации:форматы,хосты и группы
Файл инвентаризации может быть в одном из многих форматов, в зависимости от имеющихся у вас плагинов инвентаризации. Наиболее распространены форматы INI и YAML. Базовый INI может выглядеть так:
mail.example.com foo.example.com bar.example.com one.example.com two.example.com three.example.com
Заголовки в скобках — это названия групп, которые используются для классификации хостов и принятия решения о том, какие хосты вы контролируете, в какое время и с какой целью. Имена групп должны соответствовать тем же правилам, что и .
Вот тот же основной файл инвентаря в формате YAML:
all: hosts: mail.example.com: children: webservers: hosts: foo.example.com: bar.example.com: dbservers: hosts: one.example.com: two.example.com: three.example.com:
Группы по умолчанию
Есть две группы по умолчанию: и не . группы содержат каждый хост. группа содержит все узлы , которые не имеют другую группу в стороне от . Каждый хост всегда будет принадлежать как минимум к 2 группам ( и не или и некоторые другие группы). Хотя и присутствуют всегда, они могут быть неявными и не появляться в списках групп, таких как .
Хозяева в нескольких группах
Вы можете (и,вероятно,будете)поместить каждого хоста в более чем одну группу.Например,производственный веб сервер в центре данных в Атланте может быть включен в группы под названием и и .Вы можете создавать группы,которые отслеживают:
- Что-приложение,стек или микросервис (например,серверы баз данных,веб-серверы и т.д.).
- Где-в центре данных или регионе,для связи с локальным DNS,хранилищем и т.д.(например,на востоке,западе).
- Когда-Стадия разработки,чтобы избежать тестирования на производственных ресурсах (например,прод,тест).
Расширение предыдущей инвентаризации YAML для включения того,как,когда и где будет выглядеть:
all: hosts: mail.example.com: children: webservers: hosts: foo.example.com: bar.example.com: dbservers: hosts: one.example.com: two.example.com: three.example.com: east: hosts: foo.example.com: one.example.com: two.example.com: west: hosts: bar.example.com: three.example.com: prod: hosts: foo.example.com: one.example.com: two.example.com: test: hosts: bar.example.com: three.example.com:
Вы можете видеть, что существует в , и .
Вы можете также использовать вложенные группы для упрощения и в этой описи, за тот же результат:
all: hosts: mail.example.com: children: webservers: hosts: foo.example.com: bar.example.com: dbservers: hosts: one.example.com: two.example.com: three.example.com: east: hosts: foo.example.com: one.example.com: two.example.com: west: hosts: bar.example.com: three.example.com: prod: children: east: test: children: west:
Вы можете найти больше примеров того, как организовать свои инвентаризации и сгруппировать хосты в .
Добавление диапазонов хостов
Если у вас много хостов со схожим шаблоном,вы можете добавить их в виде диапазона,а не перечислять каждое имя хоста по отдельности:
В INI:
www.example.com
В ЯМЛ:
... webservers: hosts: www.example.com:
При определении числового диапазона хостов можно задать шаблон (приращение между порядковыми номерами):
В INI:
www.example.com
В ЯМЛ:
... webservers: hosts: www.example.com:
Для числовых деталей ведущие нули могут быть включены или удалены по желанию.Диапазоны включают в себя.Можно также определить алфавитные диапазоны:
db-.example.com
Инвентаризация примеров настройки
См. Также , в котором показан инвентарь вместе с плейбуками и другими артефактами Ansible.
Пример:Одна инвентаризация на окружающую среду
Если вам необходимо управлять несколькими средами, иногда целесообразно, чтобы для каждого инвентаря определялись только узлы одной среды. Таким образом, сложнее, например, случайно изменить состояние узлов внутри «тестовой» среды, когда вы действительно хотите обновить некоторые «промежуточные» серверы.
Для приведенного выше примера у вас может быть файл :
db01.test.example.com db02.test.example.com app01.test.example.com app02.test.example.com app03.test.example.com
Этот файл включает только хосты, которые являются частью «тестовой» среды. Определите «промежуточные» машины в другом файле с именем :
db01.staging.example.com db02.staging.example.com app01.staging.example.com app02.staging.example.com app03.staging.example.com
Чтобы применить playbook с именем ко всем серверам приложений в тестовой среде, используйте следующую команду:
ansible-playbook -i inventory_test -l appservers site.yml
Пример:Группировка по функциям
В предыдущем разделе вы уже видели пример использования групп для объединения хостов с одинаковыми функциями.Это позволяет вам,например,определить правила брандмауэра внутри плейбука или роли,затрагивающие только серверы баз данных:
- hosts: dbservers tasks: - name: Allow access from 10.0.1 ansible.builtin.iptables: chain: INPUT jump: ACCEPT source: 10.0.1
Пример:Группировка по расположению
Другие задачи могут быть сосредоточены на том, где находится определенный хост. Предположим, что и находятся в DC1, а — в DC2:
db01.test.example.com app01.test.example.com db02.test.example.com
На практике,вы даже можете смешать все эти установки,так как в один день вам может понадобиться обновить все узлы в определенном центре данных,а в другой день-обновить все серверы приложений,независимо от их местонахождения.
См.также
-
Вытягивание запасов из динамических или статических источников
-
Инвентаризация из динамических источников,таких как облачные провайдеры.
-
Примеры основных команд
-
Изучение языка конфигурации, развертывания и оркестровки Ansible.
- Список рассылки
-
Вопросы? Помочь? Идеи? Остановитесь на списке в Google Groups
- irc.libera.chat
-
#ansible IRC чат-канал
2012–2018 Майкл ДеХан 2018–2021 Red Hat, Inc.Лицензируется по версии 3 Стандартной общественной лицензии GNU.https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
Использование нескольких паролей
Ansible поддерживает для хранилища несколько паролей, сгруппированных по разным идентификаторам. Это полезно, если вы хотите иметь выделенные пароли хранилища для различных сред – для разработки, тестирования и производства.
Чтобы создать новый зашифрованный файл с пользовательским идентификатором хранилища, включите параметр –vault-id вместе с меткой и расположением, где ansible-vault может найти пароль для этого хранилища. Метка может быть любой, а расположение может быть либо prompt (что означает, что команда должна предложить вам ввести пароль), либо путь к файлу паролей.
Это создаст новый идентификатор по имени dev, который использует prompt для получения пароля. Комбинируя этот метод с файлами переменных группы, вы сможете создать отдельные хранилища для каждой среды приложения:
Мы использовали dev и prod в качестве идентификаторов хранилищ, чтобы продемонстрировать, как вы можете создавать отдельные хранилища для каждой среды. Самостоятельно вы можете создать столько хранилищ, сколько захотите, и использовать любой ID.
Теперь, чтобы просмотреть, отредактировать или расшифровать эти файлы, вам необходимо предоставить тот же ID хранилища и источник пароля вместе с командой ansible-vault:
Ansible Vault для хранения конфиденциальных данных
Если ваши плейбуки Ansible содержат конфиденциальные данные, такие как пароли, ключи API и учетные данные, важно обеспечить их безопасность с помощью шифрования. Ansible предоставляет ansible-vault для шифрования файлов и переменных
Несмотря на то, что любой файл данных Ansible, а также двоичные файлы, возможно зашифровать изначально, чаще для шифрования переменных файлов, содержащих конфиденциальные данные, используется ansible-vault. После шифрования файла с помощью этого инструмента вы сможете выполнять, редактировать или просматривать его, только предоставив соответствующий пароль, указанный при первом шифровании файла.
Создание нового зашифрованного файла
Вы можете создать новый зашифрованный файл Ansible с помощью:
Эта команда выполнит следующие действия:
- Сначала вам будет предложено ввести новый пароль. Вам нужно будет указывать этот пароль при каждом доступе к содержимому файла, будь то редактирование, просмотр или просто запуск плейбука (или команд с использованием его значений).
- Затем откроется редактор командной строки по умолчанию, чтобы вы могли заполнить файл требуемым содержимым.
- Наконец, когда вы закончите редактирование, ansible-vault сохранит файл как зашифрованный.
Шифрование существующего файла Ansible
Чтобы зашифровать существующий файл Ansible, вы можете использовать следующую команду:
Эта команда запросит у вас пароль, который вам нужно будет вводить при каждом доступе к файлу credentials.yml.
Просмотр содержимого зашифрованного файла
Если вы хотите просмотреть содержимое файла, который ранее был зашифрован с помощью ansible-vault, и вам не нужно изменять его содержимое, вы можете использовать команду:
Она предложит вам указать пароль, который вы выбрали при первом шифровании файла с помощью ansible-vault.
Редактирование зашифрованного файла
Чтобы изменить содержимое файла, который ранее был зашифрован с помощью Ansible Vault, выполните:
Эта команда предложит вам указать пароль, который вы выбрали при первом шифровании файла credentials.yml. После проверки пароля откроется редактор командной строки по умолчанию с незашифрованным содержимым файла, что позволит вам внести нужные изменения. По завершении вы можете сохранить и закрыть файл, как обычно, и обновленное содержимое будет сохранено и зашифровано.
Расшифровка файлов
Если вы хотите навсегда расшифровать файл, ранее зашифрованный с помощью ansible-vault, вы можете сделать это с помощью следующего синтаксиса:
Эта команда предложит вам ввести тот пароль, который использовался при первом шифровании файла. После проверки пароля содержимое файла будет сохранено на диск в виде незашифрованных данных.
Как создать ключи SSH?
Сначала необходимо создать ключи ssh для аутентификации на локальном сервере. Для этого существует специальная утилита ssh-keygen, которая входит в набор утилит OpenSSH. По умолчанию она создает пару 2048 битных RSA ключей, которая подойдет не только для SSH, но и для большинства других ситуаций.
И так, генерация ключей ssh выполняется командой:
Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке ~/.ssh/. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa, а публичный id_rsa.pub.
Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Его можно не указывать, если не хотите. Использование дополнительного шифрования имеет только один минус — необходимость вводить пароль, и несколько преимуществ:
- Пароль никогда не попадет в сеть, он используется только на локальной машине для расшифровки ключа. Это значит что перебор по паролю больше невозможен.
- Секретный ключ хранится в закрытом каталоге и у клиента ssh нет к нему доступа пока вы не введете пароль;
- Если злоумышленник хочет взломать аутентификацию по ключу SSH, ему понадобится доступ к вашей системе. И даже тогда ключевая фраза может стать серьезной помехой на его пути.
Но все же, это необязательное дополнение и если не хотите, то вы можете просто нажать Enter. Тогда доступ по ключу ssh будет выполняться автоматически и вам не нужно будет что-либо вводить.
Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере.
Присвоение переменной одной машине:переменные хоста
Вы можете легко назначить переменную одному хосту,а затем использовать ее в книгах воспроизведения.В INI:
host1 http_port=80 maxRequestsPerChild=808 host2 http_port=303 maxRequestsPerChild=909
В ЯМЛ:
atlanta: hosts: host1: http_port: 80 maxRequestsPerChild: 808 host2: http_port: 303 maxRequestsPerChild: 909
Уникальные значения,такие как нестандартные SSH-порты,работают так же хорошо,как и хостовые переменные.Вы можете добавить их в вашу инвентаризацию,добавив номер порта после имени хоста двоеточием:
badwolf.example.com:5309
Переменные соединения также хорошо работают и с переменными хоста:
localhost ansible_connection=local other1.example.com ansible_connection=ssh ansible_user=myuser other2.example.com ansible_connection=ssh ansible_user=myotheruser
Note
Если вы перечислите нестандартные порты SSH в своем конфигурационном файле SSH, соединение найдет и использует их, но соединение — нет.
Инвентарные псевдонимы
Вы также можете определить псевдонимы в вашем инвентаре:
В INI:
jumper ansible_port=5555 ansible_host=192.0.2.50
В ЯМЛ:
... hosts: jumper: ansible_port: 5555 ansible_host: 192.0.2.50
В приведенном выше примере запуск Ansible с псевдонимом хоста «jumper» будет подключаться к 192.0.2.50 на порту 5555. См. для дальнейшей настройки подключения к хостам.
Note
Значения, передаваемые в формате INI с использованием синтаксиса , интерпретируются по-разному в зависимости от того, где они объявлены:
- При объявлении inline с хостом значения INI интерпретируются как буквенные структуры Python (строки, числа, кортежи, списки, dicts, booleans, None). Строки хоста принимают несколько параметров на строку. Поэтому им нужен способ указать, что пробел является частью значения, а не разделителем.
- При объявлении в разделе значения INI интерпретируются как строки. Например, создаст строку, равную ‘FALSE’. В отличие от строк хоста, разделы принимают только одну запись в каждой строке, поэтому все, что должно стоять после знака .
- Если значение переменной,заданной в инвентаризации INI,должно быть определенного типа (например,строка или булевое значение),всегда указывайте тип с фильтром в вашей задаче.При потреблении переменных не полагайтесь на типы,заданные в инвентарях INI.
- Рассмотрим возможность использования формата YAML для источников инвентаризации,чтобы избежать путаницы с фактическим типом переменной.Плагин инвентаризации YAML последовательно и корректно обрабатывает значения переменных.
Вообще говоря, это не лучший способ определить переменные, которые описывают вашу системную политику. Установка переменных в основном файле инвентаризации — это только сокращение. См. для рекомендаций по хранению значений переменных в отдельных файлах в каталоге ‘host_vars’.
Шаг 3 — Тестирование подключения
После настройки файла инвентаризации для вашего сервера, вы можете проверить способность Ansible подключаться к этим серверам и запускать команды через SSH.
Для этого руководства мы будем использовать учетную запись root в Ubuntu, поскольку обычно это единственная учетная запись, которая доступна по умолчанию на новых серверах. Если на ваших хостах Ansible уже имеются учетные записи sudo, вам рекомендуется использовать эту учетную запись.
Вы можете использовать аргумент , чтобы задать пользователя удаленной системы. Если не указано иное, Ansible попытается подключиться от имени текущего пользователя системы на узле управления.
Запустите на локальном компьютере или узле управления Ansible следующую команду:
Эта команда будет использовать встроенный модуль хоста Ansible’для тестирования подключения на всех узлах из файла инвентаризации по умолчанию. При этом выполняется подключение от имени пользователя root. Модуль тестирует следующее:
- доступность хостов;
- наличие действующих учетных данных SSH;
- способность хостов запускать модули Ansible с помощью Python.
Результаты должны выглядеть примерно следующим образом:
Если это ваше первое подключение к данным серверам через SSH, вы должны будете подтвердить подлинность хостов, к которым подключаетесь через Ansible. Введите в диалоговом окне, а затем нажмите для подтверждения.
Когда вы получите от хоста ответ , это будет означать, что вы готовы запускать команды и плейбуки Ansible на этом сервере.
Как подключиться по SSH с помощью ключа
Выше мы разобрали простое подключение по паролю, но гораздо безопаснее подключаться, используя ключ. В этом случае нужно вводить пароль от ключа, а не юзера сервера. Возможно даже вообще не вводить никаких паролей, а использовать только файл-ключ, что является очень удобным и относительно безопасным. Но обо всем по порядку.
Генерация (создание) SSH-ключа
Для начала нужно создать SSH-ключ на той машине, с которой будем подключаться к серверу, то есть ключ создается на стороне клиента, для этого не нужно заходить на сервер.
Чтобы создать ключ, нужно ввести команду . В примере мы будем использовать самую распространенную папку для ключей, которая находится в домашней папке пользователя: или ее укороченной версией :
После ввода утилита попросит задать пароль для ключа. Здесь довольно важный момент. Можно вовсе не задавать пароль и просто нажать Enter. В таком случае подключение к серверу будет осуществляться только по ключу и без всякого ввода пароля.
Но в примере мы будем «параноиками» и зададим пароль на использование ключа. Придумаем именно отдельный пароль, не тот, что от пользователя сервера. Можно выбрать вариант проще, который возможно будет без труда запомнить и ввести вручную, например . Его мы будем в будущем вводить каждый раз, как потребуется использовать ключ. И так, задаем…
ssh-keygen -f ~/.ssh/server-key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase):
После этого нас попросят ввести пароль еще раз, повторяем его и если вы правильно ввели путь до папки для ключа, то должен получиться примерно такой вывод:
:~$ ssh-keygen -f ~/.ssh/server-key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/uxumax/.ssh/server-key. Your public key has been saved in /home/uxumax/.ssh/server-key.pub. The key fingerprint is: SHA256:RX489Wcrb1rt/CRlEs08D8T5Wn//qydYZOpOlIs+cGE The key's randomart image is: +-------+ | . .o. | | o . oo= | | o + ooB| | E ..+ +B| | S .o+..+=| | . .o...+++| | o..oo .+=| | ...o .+*.| | .o. o+.O| +---------+ :~$
В выводе строка с текстом говорит в какой именно папке сохранился ключ.
Добавление ключа в список доверенных на сервере
В предыдущем этапе мы только создали ключ. Пока он не подходит ни к одному серверу. Чтобы использовать его для входа на наш сервер, необходимо добавить его в список доверенных ключей на этом сервере. Звучит сложно, но на самом деле все обходится лишь одной командой, которая содержит путь до ключа, логин и IP-адрес сервера в своих опциях и имеет такой вид: .
После ввода команды потребуется разово ввести пароль от сервера, после чего ключ будет авторизован на сервере.
:~$ ssh-copy-id -i ~/.ssh/server-key /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/uxumax/.ssh/server-key.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys 's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh ''" and check to make sure that only the key(s) you wanted were added. :~$
Подключение к серверу по ключу
Теперь можно подключаться к серверу, используя ключ. Для этого вводим команду, которая содержит логин, IP-адрес сервера и путь до ключа с опцией -i:
После ввода потребуется ввести пароль от ключа, который мы задавали в прошлом разделе. Если вы тогда просто нажали Enter, ничего не вводили, то вас сразу перекинет на север, без запроса пароля.
:~$ ssh -i ~/.ssh/server-key Enter passphrase for key '/home/uxumax/.ssh/server-key': Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. :~#
Запуск плейбука с зашифрованными данными
Каждый раз, когда вы запускаете плейбук, в котором используются данные, ранее зашифрованные с помощью ansible-vault, вам нужно будет указывать пароль хранилища в команде playbook.
Если вы использовали параметры по умолчанию и prompt при шифровании данных плейбука, вы можете использовать опцию –ask-vault-pass, чтобы Ansible запрашивал пароль:
Если вы использовали файл пароля вместо prompt, вы должны использовать опцию –vault-password-file:
Если вы используете данные, зашифрованные с помощью ID, вам нужно указать тот же ID хранилища и источник пароля, который вы использовали при первом шифровании данных:
Если вы используете файл пароля с ID, вы должны указать метку, а затем полный путь к файлу пароля в качестве источника:
Если ваш play использует несколько хранилищ, вы должны добавить параметр –vault-id для каждого из них в произвольном порядке: