今天在公司批量执行重启服务的操作,使用 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的操作再来更新~