• ansible执行用户问题


    问题记录:

    需求:机器上有3个用户分别是:root、lihaiyu、ecx

    其中ecx有登录权限并且配置了sudo免密,lihaiyu没有登录权限,没有sudo免密

    ansible的hosts

    1. [test]
    2. test-102 ansible_ssh_port=22 ansible_ssh_user=ecx ansible_ssh_host=192.168.62.102 ansible_ssh_pass="123456**"

    场景一、现在需要使用ecx用户进行登录,拷贝一个文件到lihaiyu最后还要拷贝一个文件到ecx目录下,使用代码如下:

    1. ---
    2. - hosts: test-102
    3. tasks:
    4. # ping
    5. - name: ping dest host
    6. ping:
    7. # 拷贝压缩包
    8. - name: copy a.txt # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
    9. copy:
    10. src: ./a.txt
    11. dest: /home/lihaiyu
    12. backup: no
    13. - name: testimg transfer user
    14. copy:
    15. src: ./a.txt
    16. dest: /home/ecx

     原因:ecx用户登录的,没有权限操作lihaiyu用户目录

    解决办法:修改为如下,默认使用的become_method是sudo

    1. ---
    2. - hosts: test-102
    3. tasks:
    4. # ping
    5. - name: ping dest host
    6. ping:
    7. # 拷贝压缩包
    8. - name: copy a.txt to ecx dir # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
    9. copy:
    10. src: ./a.txt
    11. dest: /home/ecx
    12. backup: no
    13. - name: copy a.txt to lihaiyu dir
    14. copy:
    15. src: ./a.txt
    16. dest: /home/lihaiyu
    17. become: yes
    18. become_user: lihaiyu

     场景二、实际上一般只使用ecx用户做登录的,ansible后续的操作都是使用lihaiyu这个用户,比如下面这种情况,针对这个hosts设置用户为lihaiyu

    1. ---
    2. - hosts: test-102
    3. become: yes
    4. become_user: lihaiyu
    5. tasks:
    6. # ping
    7. - name: ping dest host
    8. ping:
    9. # 拷贝压缩包
    10. - name: copy a.txt to ecx dir # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
    11. copy:
    12. src: ./a.txt
    13. dest: /home/ecx
    14. backup: no
    15. # 此处省略很多个任务
    16. - name: copy a.txt to lihaiyu dir
    17. copy:
    18. src: ./a.txt
    19. dest: /home/lihaiyu

    但是报错如下:

     解决办法试一下在操作ecx这个用户里面增加become,如下:

    1. ---
    2. - hosts: test-102
    3. become: yes
    4. become_user: lihaiyu
    5. tasks:
    6. # ping
    7. - name: ping dest host
    8. ping:
    9. # 拷贝压缩包
    10. - name: copy a.txt to ecx dir # 目标文件与源文件不同 拷贝替换,这里设置不备份tar.gz文件
    11. copy:
    12. src: ./a.txt
    13. dest: /home/ecx
    14. backup: no
    15. become: yes
    16. become_user: ecx
    17. # 此处省略很多个任务
    18. - name: copy a.txt to lihaiyu dir
    19. copy:
    20. src: ./a.txt
    21. dest: /home/lihaiyu

    大概得出结论:权限become的用户权限:name>hosts。hosts下设置了become_user也不要害怕,因为name下面还可以设置become_user,这样就可以解决大部分的权限问题了。因为ecx是有sudo权限的,在hosts下设置become_user使用的方法默认是sudo切换的,但是name下依旧可以切换到其他用户,依旧是使用登录用户ecx使用sudo切换的,可以解释的通,不求甚解,撤了

  • 相关阅读:
    我遇到的最蠢的bug,竟然是因为这个原因……
    代码块,静态代码快,构造代码块,静态方法
    1099:第n小的质数(信奥)
    Android入门第15天-Android各版本号对比
    conda取消自动进入base环境
    【GDB】 command 命令
    Trajectory Data Collection with Local Differential Privacy(论文翻译)
    AtCoder abc 133
    聊一聊 golang 的测试与性能调优
    目标检测算法 - YOLOv1
  • 原文地址:https://blog.csdn.net/Li_haiyu/article/details/126633334