Настройка SSH-ключей и повышение привилегий

LinuxBeginner
Практиковаться сейчас

Введение

Доступ к управляемым узлам является основой автоматизации 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.