Подключение через SSH Proxy
Indeed PAM поддерживает подключение Ansible к ресурсам через прокси-сервер. При таком сценарии Ansible подключается к компоненту SSH Proxy, который предоставляет доступ к ресурсам по протоколам SSH, SCP и SFTP.
Компонент устанавливает соединение с ресурсом от имени указанной учетной записи, контролирует доступ к нему и записывает все действия на ресурсе в журналы События, Активные сессии и Все сессии.
В сценарии работы Ansible через SSH Proxy не поддерживается двухфакторная аутентификация.
Требования
Для работы Ansible через SSH Proxy требуется:
- Ansible 2.14 и выше
- Доступ к компоненту Indeed PAM SSH Proxy
- Учетная запись Indeed PAM, имеющая доступ к целевому ресурсу
- AAPM-лицензия, если используется Ansible Lookup Plugin
Настройка подключения
Чтобы настроить подключение из Ansible-плейбука через SSH Proxy:
Сформируйте строку подключения к SSH Proxy в кодировке UTF-8 по шаблону:
<pam_user>#<resource_address>#<account_name>#[reason]pam_user— имя пользователя Indeed PAM для аутентификации в SSH Proxy.resource_address— IP-адрес или DNS-имя целевого ресурса.account_name— имя учетной записи, под которой пользователь подключается к целевому ресурсу.reason— причина подключения к ресурсу, если ее требуется указать согласно политике.
Пример:
pam.admin#192.168.0.100#PAM.LOCAL\pam-admin#ОбслуживаниеНастройте конфигурацию Ansible для подключения к Indeed PAM в одном из файлов:
Ansible-плейбук — укажите параметры в секции
vars.Конфигурационный файл inventory — укажите параметры в секции
hosts.Параметры конфигурации
Параметр Требование Описание ansible_hostОбязательный DNS-имя или IP-адрес компонента SSH Proxy ansible_portОбязательный Порт компонента SSH Proxy.
Порт по умолчанию:2222ansible_userОбязательный Строка подключения к SSH Proxy.
Пример:pam.admin#10.0.0.1#DOMAIN\admin.ansible_passwordНеобязательный Пароль пользователя PAM. Укажите, если настроена аутентификация по паролю. Рекомендуется шифровать пароль с помощью Ansible Vault. ansible_ssh_private_key_fileНеобязательный Путь к SSH-ключу пользователя PAM. Укажите, если настроена аутентификация по SSH-ключу.
Пример:/home/user/.ssh/id_rsa.ansible_ssh_retriesНеобязательный Количество повторных попыток подключения. Используйте, если необходимо подключиться заново после обрыва соединения или закрытия сессии в консоли администратора. Примеры
- Ansible-плейбук
- Файл inventory
- name: Выполнить команду через PAM SSH Proxy
hosts: all
gather_facts: false
vars:
ansible_host: "pam.company.com"
ansible_port: 2222
ansible_user: "pam.admin#192.168.0.100#DOMAIN\\admin"
ansible_password: "{{ pam_password }}"
tasks:
- name: Получить информацию о системе
ansible.builtin.raw: uname -a
register: result
changed_when: false
- name: Показать результат
ansible.builtin.debug:
msg: "{{ result.stdout | trim }}"Один ресурс---
all:
hosts:
target_server:
ansible_host: pam.company.com
ansible_port: 2222
ansible_user: "pam.admin#192.168.0.100#DOMAIN\\admin"
ansible_password: "{{ vault_pam_password }}"Несколько ресурсов---
all:
vars:
ansible_port: 2222
ansible_host: pam.company.com
ansible_password: "{{ vault_pam_password }}"
hosts:
web_server:
ansible_user: "pam.admin#10.11.5.10#DOMAIN\\web-admin"
db_server:
ansible_user: "pam.admin#10.11.5.20#DOMAIN\\db-admin"
app_server:
ansible_user: "pam.admin#190.160.1.100#LINUX-SERVER\\db-admin#Обслуживание"
Запуск сценария
Чтобы запустить сессию, откройте терминал и выполните команду для подключения к ресурсу
ansible-playbook <playbook> [-i <inventory>] [-e <variable>]
playbook— название Ansible-плейбука;inventory— имя конфигурационного файла с настройками подключения;variable— имя переменной окружения.
Примеры команд запуска
ansible-playbook playbook.yml
ansible-playbook playbook.yml -i inventory.yml
ansible-playbook playbook.yml -i inventory.yml -e "pam_password=${PAM_PASSWORD}"
Использование Ansible Vault
Рекомендуется не хранить учетные данные в открытом виде и шифровать их с помощью компонента Ansible Vault.
Чтобы зашифровать пароль пользователя PAM:
Откройте терминал и выполните команду для шифрования пароля:
ansible-vault encrypt_string --ask-vault-pass '<password>' --name '<variable>'password— пароль пользователя Indeed PAM, который нужно зашифровать;variable— имя переменной для шифрования.
Введите пароль, который используется для расшифровки переменной при запуске плейбука.
В результате в терминале отобразится зашифрованная переменная.Создайте файл в формате YAML или JSON и сохраните в него результат команды.
- YAML
- JSON
vault_pam_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
31643864386664376639656162346664313937633035346638656139376138656163376638656164
6337663961383964666137633930626439656637666137660a31323334353637383930616263646566
30313233343536373839616263646566303132333435363738396162636465660a6162636465663132{
"vault_pam_password": "$ANSIBLE_VAULT;1.1;AES256\n31643864386664376639656162346664313937633035346638656139376138656163376638656164\n6337663961383964666137633930626439656637666137660a31323334353637383930616263646566\n30313233343536373839616263646566303132333435363738396162636465660a6162636465663132"
}Укажите переменную в плейбуке:
- Для параметра
vars_filesукажите путь к файлу, в котором хранится зашифрованная переменная. - Для параметра
passwordукажите имя переменной.
Пример
---
- name: Выполнить команду через PAM SSH Proxy с использованием Ansible Vault
hosts: all
gather_facts: false
vars_files:
- ./vault.yml
vars:
ansible_host: "pam.company.com"
ansible_port: 2222
ansible_user: "pam.admin#192.168.0.100#PAM.LOCAL\\pam-admin"
ansible_password: "{{ vault_pam_password }}"
tasks:
- name: Проверить подключение
ansible.builtin.raw: id
register: result
changed_when: false
no_log: true- Для параметра
Рекомендации по безопасности
Для аутентификации сервера и сценариев автоматизации перед первым подключением к PAM добавьте публичный ключ
компонента SSH Proxy в файл known_hosts:ssh-keyscan [-p <port>] <host> >> ~/.ssh/known_hostsport— порт компонента SSH Proxy;host— DNS-имя или IP-адрес компонента SSH Proxy.
предупреждениеУбедитесь в подлинности ключа: команда
ssh-keyscanиспользует механизм Trust on first use (TOFU), при котором ключ добавляется без проверки.Не отключайте проверку публичного ключа (
StrictHostKeyChecking=no) — это снижает безопасность.Не храните пароли в открытом виде — используйте Ansible Vault для шифрования учетных данных.
Используйте параметр
no_log: true, чтобы учетные данные не попадали в логи Ansible при завершении задачи.В CI/CD-сценариях передавайте пароль и SSH-ключ через переменные окружения.
Для повышения безопасности и оптимизации работы, рекомендуется использовать следующие параметры:
gather_facts: false— отключает сбор информации о хосте, что позволяет избежать появления в логах команд запуска Python-скриптов.no_log: true— отключает вывод в консоль и запись в логи Ansible. Используйте для задач с учетными данными.become: trueиbecome_method: sudo— повышает привилегии пользователя для выполнения команд, требующих правroot.Модуль
raw— позволяет выполнять команды через SSH Proxy без установки Python на целевом ресурсе и предоставляет информативный лог в профиле сессии в консоли администратора.Пример сценария
---
- name: Выполнить команду через PAM SSH Proxy
hosts: all
gather_facts: false
become: true
become_method: sudo
vars:
ansible_host: "pam.company.com"
ansible_port: 2222
ansible_user: "pam.admin#10.10.5.190#PAM.LOCAL\\pam-admin"
ansible_password: "{{ pam_password }}"
tasks:
- name: Выполнить команду (учетные данные скрыты)
ansible.builtin.raw: uname -a
register: result
changed_when: false
no_log: true
- name: Показать результат команды (лог отображается)
ansible.builtin.debug:
msg: "{{ result.stdout | trim }}"
no_log: false