我试图在远程服务器上使用ansible 2.1运行以下任务(运行debian包需要sudo权限)。但是,当我运行该命令时,它似乎失败,并在下面复制了错误。任何关于如何进一步解决这个问题的想法都将不胜感激。
任务
---
- name: transferring artifact to server
local_action: shell ls -d /tmp/test/target/*.jar
register: test_build
- copy: src={{ test_build.stdout }} dest=/home/ubuntu/ owner=ubuntu group=ubuntu mode=644 backup=yes
become: true
become_user: ubuntu
become_method: sudo
错误
fatal: [testserver]: FAILED! => {"failed": true, "msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user. For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}
答案 0 :(得分:2)
“Ubuntu”是一个无特权的用户帐户。你不是以sudo的身份调用copy命令,而是将su“调用为sudo进入非特权帐户并将复制命令作为”ubuntu“(无特权)运行。 Ansible正在做你告诉它的。
您不应该使用来自非特权帐户的帐户进入无特权帐户。这是Ansible中的一个安全漏洞。为什么不以ubuntu而不是您开始使用的任何用户身份登录?
答案 1 :(得分:0)
我将ansible.cfg中的allow_world_readable_tmpfiles标志设置为True(默认情况下,在absible 2.1中为False)。这允许ansible将此视为警告而不是允许我继续进行的错误。其他建议的选项(我没有尝试使用流水线或安装acl工具)。