date: 2020-03-28title: ansible普通用户执行root权限 #标题
tags: ansible提权 #标签
categories: ansible # 分类
最近有小伙伴问我关于ansible提权的问题,虽然网上的文档很多,但可能有一些没有提及的问题,小伙伴他自己没琢磨出来,这里我就把这个提权的问题总结一下。
环境
| 主机名 | IP | 是否拥有sudo权限 | 登录用户 |
|---|---|---|---|
| ansible | 192.168.20.2 | 是 | zhangsan |
| client | 192.168.20.3 | 是 | lisi |
需求
ansible使用zhangsan用户登录,去通过client端的lisi用户启动client主机上的httpd服务(启动httpd服务需要使用sudo权限)。
实现过程
对zhangsan和lisi用户进行sudo授权
zhangsan的授权如下
[zhangsan@ansible ~]$ sudo cat /etc/sudoers | grep zhangsanzhangsan ALL=(ALL) NOPASSWD:ALL
lisi的授权如下
[lisi@client ~]$ sudo cat /etc/sudoers | grep lisilisi ALL=(ALL) NOPASSWD:ALL
ansible上的zhangsan用户配置免密登录客户端的lisi用户
[zhangsan@ansible ~]$ ssh-keygen -t rsa # 生成zhangsan的密钥[zhangsan@ansible ~]$ ssh-copy-id lisi@192.168.20.3 # 以lisi的用户角色发送到client主机上# 注:ansible主机上是没有lisi这个用户的[zhangsan@ansible ~]$ ssh lisi@192.168.20.3 # 测试以lisi的身份可以免密登录client主机
ansible定义主机组
[zhangsan@ansible ~]$ egrep -v '^$|^#' /etc/ansible/hosts # host主机组配置如下[test] # 定义test主机组192.168.20.3[test:vars] # 定义test主机组相关变量ansible_ssh_user="lisi" # 定义使用哪个用户去连接客户端ansible_ssh_port=22 # 定义客户端ssh监听的端口
编写playbook文件
[zhangsan@ansible ~]$ cat /etc/ansible/start_httpd.yml # playbook文件如下---- hosts: testbecome: yesbecome_method: sudogather_facts: notasks:- name: Start httpdservice:name: httpdstate: startedenabled: yes
执行测试
# 执行yml文件(zhangsan用户执行ansible-playbook指令无需提权)[zhangsan@ansible ~]$ ansible-playbook /etc/ansible/start_httpd.ymlPLAY [test] *********************************************************************TASK [Start httpd] **************************************************************changed: [192.168.20.3]PLAY RECAP **********************************************************************192.168.20.3 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0# 任务执行成功!!!
