方法一、become语句的调用
ansible -h可以看到有
- –become (-b)
- –become-method
- –become-user
- –ask-become-pass (-K)大写K
四个参数,利用这四个参数可以在ansible命令和playbook中用普通用户执行root操作。
命令:
ansible 10.12.3.27,10.31.2.38 -m shell -a 'date' -b --become-method su --become-user root --ask-become-pass(-K)大写K
输入密码后,相当于用root执行了date命令,可以把date换成 cat /etc/shadow验证root权限。 多个ip(主机列表)的主机需要相同的root密码(只用输入一次),密码不同可以分多次或者直接配好密码。
如果想配好密码,可以在/etc/ansible/hosts为每个机器添加密码或者为组添加密码。例如:
[groupa] 10.10.10.1 ansible_become_pass=rootpwd1 10.10.10.2 ansible_become_pass=rootpwd2 [groupb] 10.10.10.3 10.10.10.4 [groupb:vars] ansible_become_pass=rootpwd34
实例:
[ucentos]
130.147.219.38
[ucentos:vars]
ansible_ssh_user=hpadmin
ansible_ssh_pass=P@ssw0rd
ansible_become_pass=P@ssw0rd (*重要)
如果失败可能是ssh过去后,执行su -后没有提示输入密码,应该是编码问题,在受控机器上执行echo export en_CN.utf-8 >>~/.bashrc,然后再执行ansible命令试试。
在playbook中使用如下:
playbook: --- - hosts: 10.12.3.28,10.12.3.27 become: yes become_user: root become_method: su tasks: - name: date shell: date
others
- hosts: www.361way.com remote_user: zabbix become: yes become_method: su tasks: - selinux: state: disabled - name: disable firewalld shell: systemctl stop firewalld && systemctl disable firewalld
上面的切换主要使用的是become语句,其参数主要解释如下:
become: yes #是否允许身份切换 become_method: su #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo become_user: root #切换指定的用户
become语句的使用,可以是在全局位置(见开始示例),也可以是在局部任务处,如下是局部任务位调用的方法:
tasks: - name: transfer file to server copy: src=/root/pswd.sh dest=/tmp/pswd.sh mode=755 - name: to root and chage password become: yes become_method: su shell: /bin/bash -x /tmp/pswd.sh
当然,这里不仅仅是切换为root,也可以配合become_user,切换为其他用户。
方法二、通过sudo进行操作
sudo相关的配置文件内容解释如下:
- hosts:用于指定要执行指定任务的主机其可以是一个或多个由冒号分隔主机组。
- remote_user :用于指定远程主机上的执行任务的用户。不过remote_user也可用于各task中。也可以通过指定其通过sudo的方式在远程主机上执行任务其可用于play全局或某任务。此外甚至可以在sudo时使用sudo_user指定sudo时切换的用户。
- user:于remote_user相同
- sudo:如果设置为yes,执行该任务组的用户在执行任务的时候,获取root权限
- sudo_user:如果设置user为breeze,sudo为yes,sudo_user为bernie时,则breeze用户在执行任务时会获得bernie用户的权限
使用的时候也比较简单,还是如最上面的配置一样,只是从become换成了sudo,所不同的是,sudo方式需要事先配置的有sudo权限。
评论前必须登录!
注册