在Linux 服务器中,出于安全考虑,往往给用户不是root 账号,而是一个普通用户 。这样对于使用ansible 执行时候就会造成一些权限问题,因此我们希望通过一个普通用户先登陆,再su切到root执行。由于每台主机的普通用户和root用户的密码又不同。希望在通过ansible执行的时候不需要交互输入密码,而是直接执行后输出结果。如何操作呢?
下面方法前提是ansible 主机这个普通用户在远程机器需要有 sudo 权限,如果没有请添加,执行命令:
echo " "你的usernam" ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
方法一:
修改 ansible.cfg 配置文件 ,将下列参数注释掉 ,再执行
#remote_user = root 远程用户
[privilege_escalation]
#become=True 允许用户切换
#become_method=sudo 用户切换方式
#become_user=root 切换后用户身份
#become_ask_pass=False 是否需要输入密码
方法二:
在执行ansible 命令时添加执行参数:
–become (-b) 允许切换用户
–become-method 切换方式 默认sudo
–become-user 切换后用户
–ask-become-pass (-K)大写K 忽略提示密码
ansible 10.203.90.114 -m shell -a 'date' -b --become-method su --become-user root --ask-become-pass(-K)大写K
如果对host文件有对应的配置文件话,可以在执行ansible-playbook或ansible 时候 提前对host文件进行修改,如下:
[ucentos] 主机组名
xxx.xxx.xxx.xxx 主机IP
[all:vars] 如果允许多个主机组使用 ,否则可以将all 设置成主机组名
ansible_ssh_user=root 连接用户
ansible_ssh_pass=password 连接密码
ansible_become_pass=password 提权密码
方法三 yaml 文件参数修改
对于复杂的操作,我们通常会用到playbook 执行,因此我们也可以在playbook 把需要提权的操作加上权限,这样最小化控制,从而更加符合日常安全运维需求,例如,
---
- hosts: 主机IP
remote_user: xxx
become: yes 允许切换
become_user: root 切换身份
become_method: sudo 切换方式
tasks: 具体执行任务模块
- name: date
shell: date
以上就是常用的三种方法提权,欢迎补充