记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。
ansible-playbook 执行剧本时的sudo-su使用方法




1,由于服务器基本上不能使用root登陆,只能使用普通账号,
使用sudo来管理系统,所以有些操作需要提取执行。

2,下面来个简单演示ansible-playbook执行sudo权限操作方法。

以下是YAML内容:


```yaml
- name:  启动rs组的所有主机的nginx服务。
  hosts: rs
  user: elk
  
  tasks: 
  - name: 启动nginx命令.
    become: yes
    become_method: sudo
    service:
      name: nginx 
      state: started 
```


3,从上面YAML文件内容可以看出来,这里是采用单个任务中sudo提取方法。

上面的切换主要使用的是become语句,其参数主要解释如下:


become:        yes 
#是否允许身份切换

become_method: sudo
#切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo

become_user: root   

#切换指定的用户



当然,如果你采用了sudo方法,可能需要使用visudo命令修改成无需提供密码方法,

并且上面的示例中 用户 elk,也要有sudo相关权限,比如Centos,RHEL加入wheel组。


4,become语句的使用,可以是在全局位置(见下面示例)。


```yaml
- name:  启动rs组的所有主机的nginx服务。
  hosts: rs
  user: elk
  become: yes
  become_method: sudo
  tasks: 
  - name: 启动nginx命令.
    service:
      name: nginx 
      state: started 
```


当然,这里不仅仅是切换为root,也可以配合become_user,切换为其他用户。


5,sudo相关的配置文件内容解释如下:


```yaml
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权限。


6,总结。


1,su 方式也可以使用,只是不太方便,需要提供切换的账号密码,并且有些服务器禁用su命令切换root账号。

不建议采用此方法 ,会出现失败。

```

2,sudo方法比较好用,只要执行剧本的账号没有问题,就可以正常执行。建议采用此方法。

```

3,即使使用become方法,become_method采用sudo方法,一样可以正常执行剧本。
```


转载请标明出处【ansible-playbook 执行剧本时的sudo-su使用方法】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论