我正在使用 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
我尝试更新的两个主机出现以下错误:
致命:[host1]:失败! => {"failed": true, "msg": "设置失败 Ansible 需要在以下情况下创建的临时文件的权限 成为非特权用户(rc:1,错误:chown:更改所有权
/tmp/ansible-tmp-19/stat.py':操作不 允许的 )。有关解决此问题的信息,请参阅 https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user”}/tmp/ansible-tmp-19/': Operation not permitted\nchown: changing ownership of
问题是,这两个出现错误的版本是一些正在更新的版本的克隆。 我比较了 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
和原始keys.yml:
- name: public key
copy:
src: /Users/me/Documents/keys/id_rsab
dest: ~/.ssh/
owner: unpriv
group: unpriv
mode: 060
backup: yes
我将剧本更改为:
- 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
和
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
它适用于所有主机。
尝试在远程主机上安装ACL,然后执行ansible脚本
sudo apt-get install acl
如doc
中所述当连接用户和become_user都没有权限时,模块文件将以Ansible连接的用户(remote_user)写入,但该文件需要被Ansible设置为become的用户可读。在 POSIX 系统上,Ansible 通过以下方式解决这个问题:
首先,如果 setfacl 已安装并在远程 PATH 中可用,并且远程主机上的临时目录使用 POSIX.1e 文件系统 ACL 支持挂载,则 Ansible 将使用 POSIX ACL 与第二个非特权用户共享模块文件。
接下来,如果 POSIX ACL 不可用或 setfacl 无法运行,对于支持以非特权用户身份执行此操作的系统,Ansible 将尝试使用 chown 更改模块文件的所有权
你可以尝试这样的事情:
- 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
注意:
become: true
become_user: root
查看“成为”文档以获取更多信息
虽然安装
acl
模块有效,但还有另一种选择。
将下面的行添加到 ansible.cfg 的默认部分。
allow_world_readable_tmpfiles = True
更好的是,只需将其添加到需要它的任务中即可:
vars:
allow_world_readable_tmpfiles: true
具有更多详细信息的类似问题是Becoming non root user in ansible failed
我正在使用临时命令,当我遇到这个问题时,将
-b --become-user ANSIBLE_USER
添加到我的命令中可以解决我的问题。
示例:
ansible all -m file -a "path=/etc/s.text state=touch" -b --become-user ansadmin
当然,在此之前,我已经向用户授予了 Sudo 访问权限
如果您向您的用户授予 Sudo 访问权限,您可以这样写:
ansible all -m file -a "path=/var/s.text state=touch" -b --become-user root
我可以知道如何在aix服务器上安装acl吗?