2017-03-08 170 views
0

远程服务器的 “/家” enter image description hereAnsible同步模块权限问题

远程服务器用户 1. bitnami 2. take02 3. take03 4. take04

但本地主机只Ubuntu用户。

我想复制REMOTE HOST的“home”目录作为ansible, 保留OWNER信息。

这是我的剧本:

--- 
- hosts: discovery_bitnami 
    gather_facts: no 
    become: yes 

    tasks: 
    - name: "Creates directory" 
     local_action: > 
     file path=/tmp/{{ inventory_hostname }}/home/ state=directory 

    - name: "remote-to-local sync test" 
     become_method: sudo 
     synchronize: 
     mode: pull 
     src: /home/ 
     dest: /tmp/{{ inventory_hostname }}/home 
     rsync_path: "sudo rsync" 

剧本的结果是:在控制台上

PLAY [discovery_bitnami] ******************************************************* 

TASK [Creates directory] ******************************************************* 
ok: [discovery_bitnami -> localhost] 

TASK [remote-to-local sync test] *********************************************** 
fatal: [discovery_bitnami]: FAILED! => {"changed": false, "cmd": "/usr/bin/rsync --delay-updates -F --compress --archive --rsh 'ssh -i /home/ubuntu/.ssh/red_LightsailDefaultPrivateKey.pem -S none -o StrictHostKeyChecking=no -o Port=22' --rsync-path=\"sudo rsync\" --out-format='<<CHANGED>>%i %n%L' \"[email protected]:/home/\" \"/tmp/discovery_bitnami/home\"", "failed": true, "msg": "rsync: failed to set times on \"/tmp/discovery_bitnami/home/.\": Operation not permitted (1)\nrsync: recv_generator: mkdir \"/tmp/discovery_bitnami/home/bitnami\" failed: Permission denied (13)\n*** Skipping any contents from this failed directory ***\nrsync: recv_generator: mkdir \"/tmp/discovery_bitnami/home/take02\" failed: Permission denied (13)\n*** Skipping any contents from this failed directory ***\nrsync: recv_generator: mkdir \"/tmp/discovery_bitnami/home/take03\" failed: Permission denied (13)\n*** Skipping any contents from this failed directory ***\nrsync: recv_generator: mkdir \"/tmp/discovery_bitnami/home/take04\" failed: Permission denied (13)\n*** Skipping any contents from this failed directory ***\nrsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [generator=3.1.1]\n", "rc": 23} 
    to retry, use: --limit @/home/ubuntu/work/esc_discovery/ansible_test/ansible_sync_test.retry 

PLAY RECAP ********************************************************************* 
discovery_bitnami   : ok=1 changed=0 unreachable=0 failed=1 

但是, 失败 “CMD” 工作与sudo运行良好。

$ sudo /usr/bin/rsync --delay-updates -F --compress --archive --rsh 'ssh -i /home/ubuntu/.ssh/red_PrivateKey.pem -S none -o StrictHostKeyChecking=no -o Port=22' --rsync-path=\"sudo rsync\" --out-format='<<CHANGED>>%i %n%L' [email protected]:/home/ /tmp/discovery_bitnami/home 

如何使用sudo运行“任务”?

ps。删除become: yes然后所有权限是“ubuntu” enter image description here

回答

2

我想你已经没有synchronize模块的选项。它在本地运行,没有sudoit's hardcoded

另一方面,在第一个任务中,您以root用户身份在/tmp下创建目录,因此权限仅限于root用户。因此,您会收到“权限被拒绝”错误。

或者:

  • 重构代码,这样你就不需要为本地目的root权限(或添加become: no的任务"Creates directory"),你用这意味着权限保存存档选项,这可能不是一个选择;

或:

  • 创建自己的synchronize模块的版本,并添加sudocmd变量前面;

或:

  • 使用command模块sudo /usr/bin/rsync作为呼叫。

记住synchronize模块是一个非标准的一个,有changes in the past关于所使用的账户,并requests for the changes


最重要的是,模块的当前文档相当混乱。一方面,它强烈地指出:

的使用者和同步DEST权限是那些remote_user在目标主机上或become_user如果become=yes是积极的。

但在另一个地方,它只是暗示,源和目的意义是使用pull模式时逆转:

在拉模式上下文中的远程主机源。

所以从这个问题的情况下,下面这段话是相关的,尽管它错误地指出“SRC”:

的同步SRC的用户和权限都是用户运行本地主机上的Ansible任务(或使用delegate_to时的delegate_to主机的remote_user)。

+0

谢谢! 但是, 我想将REMOTE HOST的“home”目录复制为以保留OWNER信息。 远程服务器用户 1. bitnami 2. take02 3. take03 4. take04 但本地主机只有Ubuntu用户。 –

+0

是的,这正是问题所解释的。你希望我回应你的评论吗? – techraf

+0

谢谢你......你的评论!!! –