今天在公司批量执行重启服务的操作,使用 ansible 来做,之前已经做了 root 的免密,但是重启服务的操作要用到 www 用户,然后不想写密码和重传 www 用户的密钥,所以想到了两种方案。当然直接使用 www 也可以,这不是对技术的追求嘛,所以研究一下。

一是使用 shell 模块进行 su - www -c "commond" 来执行

二是使用 ansible 的 become 模块

第一种尝试已经成功了,第二种还是需要一些参数一起使用

root 切换普通用户

playbook配置

- hosts: all
  gather_facts: false
  tasks:
  - name: 重启服务
    shell: '{{ service_name }} stop; sleep 3; {{ service_name }} start'
    become: yes         # 是否允许身份切换
    become_user: www    # 指定切换到的用户

普通用户使用 sudo 提权

至少这个普通用户在远程机器需要有 sudo 权限

echo "www ALL=(ALL) ALL" >> /etc/sudoers

playbook配置与ansible.cfg配置一起使用,优先playbook配置

使用 ansible.cfg 可以配置全局

[defaults]
remote_user = www      # 以www用户登录到远程机
[privilege_escalation]
become = true          # 是否允许身份切换
become_method = sudo   # 切换用户的方式,su需要输入root密码,sudo需要输入remote_user的密码 
become_ask_pass = no   # 执行sudo命令时是否需要输入密码,配置了这条,下条会失效
become_password = ""   # 切换用户时需要的密码,具体看是su还是sudo方式
- hosts: all
  gather_facts: false
  tasks:
  - name: 重启服务
    shell: ' stop; sleep 3;  start'
    become: yes                 # 是否允许身份切换
    become_user: www            # 以www用户登录到远程机
    become_method: sudo         # 切换用户的方式,su需要输入root密码,sudo需要输入remote_user的密码 
    become_ask_pass: no         # 执行sudo命令时是否需要输入密码,配置了这条,下条会失效
    become_password = ""        # 切换用户时需要的密码,具体看是su还是sudo方式

之后有其他关于become的操作再来更新~

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0