问题记录:
需求:机器上有3个用户分别是:root、lihaiyu、ecx
其中ecx有登录权限并且配置了sudo免密,lihaiyu没有登录权限,没有sudo免密
ansible的hosts
- [test]
- test-102 ansible_ssh_port=22 ansible_ssh_user=ecx ansible_ssh_host=192.168.62.102 ansible_ssh_pass="123456**"
- ---
- - hosts: test-102
- tasks:
- # ping
- - name: ping dest host
- ping:
- # 拷贝压缩包
- - name: copy a.txt # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
- copy:
- src: ./a.txt
- dest: /home/lihaiyu
- backup: no
- - name: testimg transfer user
- copy:
- src: ./a.txt
- dest: /home/ecx
原因:ecx用户登录的,没有权限操作lihaiyu用户目录
解决办法:修改为如下,默认使用的become_method是sudo
- ---
- - hosts: test-102
- tasks:
- # ping
- - name: ping dest host
- ping:
- # 拷贝压缩包
- - name: copy a.txt to ecx dir # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
- copy:
- src: ./a.txt
- dest: /home/ecx
- backup: no
- - name: copy a.txt to lihaiyu dir
- copy:
- src: ./a.txt
- dest: /home/lihaiyu
- become: yes
- become_user: lihaiyu
- ---
- - hosts: test-102
- become: yes
- become_user: lihaiyu
- tasks:
- # ping
- - name: ping dest host
- ping:
- # 拷贝压缩包
- - name: copy a.txt to ecx dir # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
- copy:
- src: ./a.txt
- dest: /home/ecx
- backup: no
- # 此处省略很多个任务
- - name: copy a.txt to lihaiyu dir
- copy:
- src: ./a.txt
- dest: /home/lihaiyu
但是报错如下:
解决办法试一下在操作ecx这个用户里面增加become,如下:
- ---
- - hosts: test-102
- become: yes
- become_user: lihaiyu
- tasks:
- # ping
- - name: ping dest host
- ping:
- # 拷贝压缩包
- - name: copy a.txt to ecx dir # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
- copy:
- src: ./a.txt
- dest: /home/ecx
- backup: no
- become: yes
- become_user: ecx
- # 此处省略很多个任务
- - name: copy a.txt to lihaiyu dir
- copy:
- src: ./a.txt
- dest: /home/lihaiyu
大概得出结论:权限become的用户权限:name>hosts。hosts下设置了become_user也不要害怕,因为name下面还可以设置become_user,这样就可以解决大部分的权限问题了。因为ecx是有sudo权限的,在hosts下设置become_user使用的方法默认是sudo切换的,但是name下依旧可以切换到其他用户,依旧是使用登录用户ecx使用sudo切换的,可以解释的通,不求甚解,撤了