Ansible无法设置临时权限

Ale*_*lex 5 ansible

我正在使用ansible替换多个RHEL6和RHEL7服务器上的用户的ssh密钥。我正在运行的任务是:

- name: private key   
  copy:
    src: /Users/me/Documents/keys/id_rsa
    dest: ~/.ssh/
    owner: unpriv
    group: unpriv
    mode: 0600
    backup: yes
Run Code Online (Sandbox Code Playgroud)

我尝试更新的两个主机出现以下错误:

致命的:[host1]:失败!=> {“ failed”:true,“ msg”:“无法对临时文件设置权限当成为非特权用户时,需要创建Ansible(rc:1,err:chown:更改/tmp/ansible-tmp-19/': Operation not permitted\nchown: changing ownership of/ tmp / ansible-tmp-的所有权19 / stat.py':不允许操作\ n)。有关解决此问题的信息,请参见 https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user “}

事实是,这两个正在得到错误的是一些正在更新的克隆。我已经比较了sudoers和sshd设置,以及/ tmp目录上的权限和安装选项。在问题主机和工作主机之间,它们都是相同的。关于下一步我可以检查的任何想法?

我在Mac OS Sierra上运行ansible 2.3.1.0,如果有帮助的话。

更新:

@techraf

我不知道为什么这可以在除两个主机之外的所有主机上工作。这是原始剧本:

- name: ssh_keys
  hosts: my_hosts
  remote_user: my_user
  tasks:
    - include: ./roles/common/tasks/keys.yml
      become: yes
      become_method: sudo
Run Code Online (Sandbox Code Playgroud)

和原始的keys.yml:

- name: public key
  copy:
    src: /Users/me/Documents/keys/id_rsab
    dest: ~/.ssh/
    owner: unpriv
    group: unpriv
    mode: 060
    backup: yes
Run Code Online (Sandbox Code Playgroud)

我将剧本更改为:

- name: ssh_keys
  hosts: my_hosts
  remote_user: my_user
  tasks:
    - include: ./roles/common/tasks/keys.yml
      become: yes
      become_method: sudo
      become_user: root
Run Code Online (Sandbox Code Playgroud)

keys.yml

- name: public key
  copy:
    src: /Users/me/Documents/keys/id_rsab
    dest: /home/unpriv/.ssh/
    owner: unpriv
    group: unpriv
    mode: 0600
    backup: yes
Run Code Online (Sandbox Code Playgroud)

它适用于所有主机。

小智 46

尝试在远程主机上安装 ACL,然后执行 ansible 脚本

sudo apt-get install acl
Run Code Online (Sandbox Code Playgroud)

  • 你钉住了,但为什么需要呢? (5认同)
  • 要详细了解为什么需要它,请阅读 https://docs.ansible.com/ansible/latest/user_guide/become.html#risks-of-becoming-an-unprivileged-user。“在托管主机上安装 POSIX.1e 文件系统 acl 支持。如果远程主机上的临时目录在启用 POSIX acls 的情况下安装,并且 setfacl 工具位于远程 PATH 中,则 Ansible 将使用 POSIX acls 与第二个主机共享模块文件非特权用户,而不必让每个人都可读该文件。” (2认同)

nba*_*ari 6

你可以尝试这样的事情:

- name: private key 
  become: true
  become_user: root
  copy:
    src: /Users/me/Documents/keys/id_rsa
    dest: ~/.ssh/
    owner: unpriv
    group: unpriv
    mode: 0600
    backup: yes
Run Code Online (Sandbox Code Playgroud)

请注意:

become: true
become_user: root
Run Code Online (Sandbox Code Playgroud)

查看“成为”文档以获取更多信息


小智 6

虽然安装acl模块有效,但还有一种替代方法。

将下面的行添加到 ansible.cfg 的默认部分。 allow_world_readable_tmpfiles = True

更好的是,只需将其添加到需要它的任务中即可:

  vars:
    allow_world_readable_tmpfiles: true
Run Code Online (Sandbox Code Playgroud)

具有更多详细信息的类似问题是Becoming non root user in ansible failed