Назад | Перейти на главную страницу

Использование «echo» в канале в модуле оболочки ansible

Я использую shell модуль:

- name: trust gpg key
  become: true
  shell: echo -e '5\ny\n' | gpg --homedir /root/.gnupg --command-fd 0 --edit-key 1401d4d21e93 trust

Но это жалуется на

gpg: невозможно открыть '/ dev / tty': нет такого устройства или адреса

Команда gpg работает, когда я запускаю ее вручную. Итак, проблема, похоже, в echo в трубу.

Как это исправить?

Возникшая ошибка вызвана конвейерная обработка.

Конвейерная обработка, если она поддерживается подключаемым модулем подключения, сокращает количество сетевых операций, необходимых для выполнения модуля на удаленном сервере, за счет выполнения многих модулей Ansible без фактической передачи файлов.

Вы можете попробовать установить:

export ANSIBLE_PIPELING=True
export ANSIBLE_SSH_PIPELING=True

Но я думаю, вы можете столкнуться с такой оговоркой:

Однако это (конвейерная обработка) конфликтует с повышением привилегий (стать). Например, при использовании операций «sudo:» вы должны сначала отключить «requiretty» в / etc / sudoers на всех управляемых хостах, поэтому он отключен по умолчанию. Эта опция отключена, если включен ANSIBLE_KEEP_REMOTE_FILES.

Чтобы обойти все это, вы можете создать файл для траста и использовать gpg --import-ownertrust команда.

Ссылка

Конфигурация Ansible
GPG import-ownertrust
Инструкции по импорту и экспорту GPG