Перейти к основному содержимому
Версия: Privileged Access Manager 3.4

Подключение через SSH Proxy

Indeed PAM поддерживает подключение Ansible к ресурсам через прокси-сервер. При таком сценарии Ansible подключается к компоненту SSH Proxy, который предоставляет доступ к ресурсам по протоколам SSH, SCP и SFTP.

Компонент устанавливает соединение с ресурсом от имени указанной учетной записи, контролирует доступ к нему и записывает все действия на ресурсе в журналы События, Активные сессии и Все сессии.

Ограничения

В сценарии работы Ansible через SSH Proxy не поддерживается двухфакторная аутентификация.

Требования

Для работы Ansible через SSH Proxy требуется:

Настройка подключения

Чтобы настроить подключение из Ansible-плейбука через SSH Proxy:

  1. Сформируйте строку подключения к 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#Обслуживание

  2. Настройте конфигурацию Ansible для подключения к Indeed PAM в одном из файлов:

    • Ansible-плейбук — укажите параметры в секции vars.

    • Конфигурационный файл inventory — укажите параметры в секции hosts.

      Параметры конфигурации
      ПараметрТребованиеОписание
      ansible_hostОбязательныйDNS-имя или IP-адрес компонента SSH Proxy
      ansible_portОбязательныйПорт компонента SSH Proxy.
      Порт по умолчанию: 2222
      ansible_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НеобязательныйКоличество повторных попыток подключения. Используйте, если необходимо подключиться заново после обрыва соединения или закрытия сессии в консоли администратора.
      Примеры
      - 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 }}"

Запуск сценария

Чтобы запустить сессию, откройте терминал и выполните команду для подключения к ресурсу через SSH Proxy:

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:

  1. Откройте терминал и выполните команду для шифрования пароля:

    ansible-vault encrypt_string --ask-vault-pass '<password>' --name '<variable>'
    • password — пароль пользователя Indeed PAM, который нужно зашифровать;
    • variable — имя переменной для шифрования.
  2. Введите пароль, который используется для расшифровки переменной при запуске плейбука.
    В результате в терминале отобразится зашифрованная переменная.

  3. Создайте файл в формате YAML или JSON и сохраните в него результат команды.

    vault_pam_password: !vault |
    $ANSIBLE_VAULT;1.1;AES256
    31643864386664376639656162346664313937633035346638656139376138656163376638656164
    6337663961383964666137633930626439656637666137660a31323334353637383930616263646566
    30313233343536373839616263646566303132333435363738396162636465660a6162636465663132
  4. Укажите переменную в плейбуке:

    • Для параметра 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

Рекомендации по безопасности

  1. Для аутентификации сервера и сценариев автоматизации перед первым подключением к PAM добавьте публичный ключ компонента SSH Proxy в файл known_hosts:

    ssh-keyscan [-p <port>] <host> >> ~/.ssh/known_hosts
    • port — порт компонента SSH Proxy;
    • host — DNS-имя или IP-адрес компонента SSH Proxy.

    предупреждение

    Убедитесь в подлинности ключа: команда ssh-keyscan использует механизм Trust on first use (TOFU), при котором ключ добавляется без проверки.

    Не отключайте проверку публичного ключа (StrictHostKeyChecking=no) — это снижает безопасность.

  2. Не храните пароли в открытом виде — используйте Ansible Vault для шифрования учетных данных.

  3. Используйте параметр no_log: true, чтобы учетные данные не попадали в логи Ansible при завершении задачи.

  4. В CI/CD-сценариях передавайте пароль и SSH-ключ через переменные окружения.

  5. Для повышения безопасности и оптимизации работы, рекомендуется использовать следующие параметры:

    • 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