我正在使用该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
命令。
参考