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 zhangsan
zhangsan ALL=(ALL) NOPASSWD:ALL
lisi的授权如下
[lisi@client ~]$ sudo cat /etc/sudoers | grep lisi
lisi 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: test
become: yes
become_method: sudo
gather_facts: no
tasks:
- name: Start httpd
service:
name: httpd
state: started
enabled: yes
执行测试
# 执行yml文件(zhangsan用户执行ansible-playbook指令无需提权)
[zhangsan@ansible ~]$ ansible-playbook /etc/ansible/start_httpd.yml
PLAY [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
# 任务执行成功!!!