在 ansible 的 shell 模块中的管道中使用“echo”

在 ansible 的 shell 模块中的管道中使用“echo”

我正在使用该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在管道上。

我该如何解决?

答案1

您遇到的错误是由于流水线

如果连接插件支持管道,则通过执行许多 Ansible 模块而无需实际的文件传输,可以减少在远程服务器上执行模块所需的网络操作数量。

您可以尝试设置:

export ANSIBLE_PIPELING=True
export ANSIBLE_SSH_PIPELING=True

但我认为你可能会遇到这个警告:

但是这(流水线)与特权提升(成为)相冲突。例如,当使用“sudo:”操作时,您必须首先在所有托管主机上的 /etc/sudoers 中禁用“requiretty”,这就是它默认禁用的原因。如果启用了 ANSIBLE_KEEP_REMOTE_FILES,则此选项将被禁用。

为了解决所有这些问题,您可能需要为信任创建一个文件并使用 gpg--import-ownertrust命令。

参考

Ansible 配置
GPG进口商信托基金
GPG导入导出说明

相关内容