Введение
Доступ к управляемым узлам является основой автоматизации Ansible. В реальных средах Ansible обычно подключается по SSH и использует повышение привилегий для выполнения административных задач.
В этой лабораторной работе создается временный управляемый пользователь с именем rhce_node. Вы сгенерируете SSH-ключ, авторизуете его для этого пользователя, настроите доступ к инвентарю и проверите как обычное выполнение команд по SSH, так и доступ через become.
Создание проекта для практики SSH
На этом этапе вы создадите структуру каталогов проекта и зададите настройки Ansible по умолчанию для доступа по SSH. Управляемая учетная запись уже существует, но она еще не доверяет вашему ключу.
Создайте проект и перейдите в него.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,keys,playbooks}
cd rhce-ansible
Создайте файл ansible.cfg.
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
interpreter_python = auto_silent
EOF
В этом проекте позже будет использоваться реальное SSH-подключение к 127.0.0.1. Каталог keys позволяет хранить ключи лабораторной работы отдельно от ваших стандартных файлов в ~/.ssh, а параметр host_key_checking = False позволяет избежать интерактивных запросов во время выполнения этого локального упражнения.
Генерация пары SSH-ключей
На этом этапе вы создадите пару SSH-ключей Ed25519. Закрытый ключ останется в keys/rhce_ed25519, а открытый ключ будет установлен для управляемой учетной записи. Опция -N '' создает ключ без парольной фразы для целей автоматизации.
Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible. Это обеспечит стабильность команд, даже если LabEx запускает каждый шаг отдельно.
cd /home/labex/project/rhce-ansible
Сгенерируйте пару ключей.
ssh-keygen -t ed25519 -f keys/rhce_ed25519 -N '' -C rhce-ansible-lab
В результате будут созданы два файла. keys/rhce_ed25519 — это закрытый ключ, который должен оставаться в секрете; keys/rhce_ed25519.pub — это открытый ключ, который можно добавить в учетную запись управляемого пользователя.
Просмотрите содержимое открытого ключа.
cat keys/rhce_ed25519.pub
Строка открытого ключа должна начинаться с ssh-ed25519 и заканчиваться комментарием rhce-ansible-lab. Вы будете копировать именно этот открытый ключ (не закрытый) в файл authorized_keys.
Авторизация ключа для управляемого пользователя
На этом этапе вы установите открытый ключ для временного управляемого пользователя. Вы не меняете настройки SSH для пользователя labex, а лишь подготавливаете rhce_node для этой лабораторной работы.
Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible.
cd /home/labex/project/rhce-ansible
Создайте каталог .ssh для управляемого пользователя.
sudo mkdir -p /home/rhce_node/.ssh
SSH ищет доверенные открытые ключи в каталоге .ssh пользователя. Здесь требуется sudo, так как каталог находится в домашней директории другого пользователя.
Установите ваш открытый ключ как authorized_keys.
sudo cp keys/rhce_ed25519.pub /home/rhce_node/.ssh/authorized_keys
Исправьте владельца и права доступа. SSH отклоняет ключи, если права доступа к каталогам или файлам слишком открыты.
sudo chown -R rhce_node:rhce_node /home/rhce_node/.ssh
sudo chmod 700 /home/rhce_node/.ssh
sudo chmod 600 /home/rhce_node/.ssh/authorized_keys
Значения прав доступа выбраны не случайно: 700 разрешает доступ к каталогу .ssh только пользователю rhce_node, а 600 позволяет только этому пользователю читать или записывать файл authorized_keys. Эти проверки предотвращают случайное раскрытие учетных данных.
Настройка инвентаря для доступа по SSH
На этом этапе вы создадите запись в инвентаре, которая укажет Ansible, как подключаться к управляемому пользователю по SSH на локальном хосте.
Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible.
cd /home/labex/project/rhce-ansible
Запишите инвентарь.
cat > inventory/hosts <<'EOF'
[managed]
node1 ansible_host=127.0.0.1 ansible_user=rhce_node ansible_ssh_private_key_file=/home/labex/project/rhce-ansible/keys/rhce_ed25519
EOF
Эта строка инвентаря отделяет имя Ansible от деталей подключения. node1 — это псевдоним в инвентаре, ansible_host — адрес для подключения, ansible_user — удаленная учетная запись, а ansible_ssh_private_key_file указывает на путь к закрытому ключу.
Проверьте SSH напрямую перед использованием Ansible.
ssh -i keys/rhce_ed25519 -o StrictHostKeyChecking=no rhce_node@127.0.0.1 'whoami'
Команда должна вывести rhce_node.
Прямая проверка SSH помогает сузить круг поиска проблем, если Ansible позже выдаст ошибку. Если прямое SSH-подключение не работает, исправьте ключ, владельца, права доступа или параметры подключения в инвентаре, прежде чем переходить к отладке модулей Ansible.
Проверка Ansible ping и become
На этом этапе вы протестируете подключение Ansible и повышение привилегий. Опция -b означает become, что указывает Ansible выполнять модуль с повышенными привилегиями.
Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible.
cd /home/labex/project/rhce-ansible
Запустите модуль ping через SSH.
ansible managed -m ansible.builtin.ping
В этот раз модуль ping не использует сокращенное локальное подключение. Ansible должен подключиться как rhce_node, передать небольшой модуль, выполнить его с помощью Python и вернуть pong.
Выполните команду с повышением привилегий. Команда id -u выводит 0, если она выполняется от имени root.
ansible managed -b -m ansible.builtin.command -a 'id -u'
Флаг -b включает become для этой команды. Результат 0 доказывает, что управляемый пользователь может повышать привилегии через правило sudoers, созданное для этой лабораторной работы.
Создайте файл, принадлежащий root, используя Ansible become.
ansible managed -b -m ansible.builtin.copy -a 'content=become_ready dest=/etc/rhce-ansible-become.txt mode=0644'
Запись в каталог /etc требует административных привилегий, поэтому эта финальная команда доказывает больше, чем просто наличие связи. Она подтверждает, что Ansible может как подключаться по SSH, так и выполнять привилегированные системные изменения при необходимости.
Резюме
Вы сгенерировали пару SSH-ключей, авторизовали её для временного управляемого пользователя, настроили доступ к инвентарю по SSH и проверили повышение привилегий с помощью функции become в Ansible.



