我正在运行ansible脚本,localhost
以将文件夹复制到另一个位置。然而,
- name: Copy Network
become: yes
become_user: root
copy:
src: /d/
dest: "/dest/d/"
mode: 0644
tags: [network]
在给我[Errno 13] Permission denied: b'd/f1'
。我原以为become_user
会使命令以root身份执行,但没有用。此文件的权限为0600(root:root)
。
您能给我指点一下以获得使用ansible复制该文件的权限吗?
注意:
sudo ansible-playbook p.yml
但是,它可以完美地工作,如果不想使用sudo
ansible命令并且ansible有一个窍门,我就不想使用它。
command: cp -r /d/ /dest/d/
无需附加sudo
ansible命令(ansible-playbook p.yml
)即可工作。但是,我不想使用command
是否可以帮助我,因为幂等性&copy
模块具有mode
该任务所需的选项。
错误消息:运行ansible-playbook的用户无法读取/ d / f1。
在模块copy中,become: yes
仅适用于写入文件,而不适用于读取文件。结果,该模块按预期工作。
“尝试读取文件'/ d / f1'时发生错误:[Errno 13]权限被拒绝:'/ d / f1'”
细节
默认情况下,模块copy
将文件从src
(要复制到远程服务器的文件的本地路径)复制到dest
(应将文件复制到的远程绝对路径)。在这种情况下,become: yes
意味着在远程主机中具有Ansible升级特权,而在本地主机中则没有。尽管任务在本地主机上运行,即主机和远程主机均为本地主机,但该任务become: yes
仅适用于写入文件而不是读取文件。
如果不是这样,become: yes
它将自动升级master中的特权。这可能是一个安全问题。
问:“有什么解决方法吗?”
答:没有解决方法。它将侵犯文件的所有权和权限。例如,给定控制器上的文件
shell> ll f1
-rw-rw---- 1 root root 0 Sep 13 18:17 f1
下面的剧本由无特权的用户启动
shell> cat playbook.yml
- hosts: test_01
become: true
tasks:
- copy:
src: f1
dest: /tmp
会崩溃
TASK [copy] ****
fatal: [test_01]: FAILED! =>
msg: 'an error occurred while trying to read the file ''/scratch/f1'':
[Errno 13] Permission denied: b''/scratch/f1'''
解决方案之一是使运行剧本的用户可读取文件。例如,在第一次播放中使超级用户可以读取其他文件,而在第二次播放中使用它
shell> cat playbook.yml
- hosts: localhost
become: true
tasks:
- file:
path: f1
mode: o+r
- hosts: test_01
become: true
tasks:
- copy:
src: f1
dest: /tmp
当然,只有在允许用户升级到控制器的root用户的情况下,这才起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句