ANSIBLE playbook

sudo提权:修改/etc/sudoers配置文件
修改/etc/sudoers的方法如下:
1. visudo(带语法检查,默认没有颜色提示)
2. vim /etc/sudoers(不带语法检查,默认有颜色提示)

授权格式如下:
用户或组 主机列表=(提权身份) [NOPASSWD]:命令列表
注意事项:命令需要写绝对路径,对组授权需要在组名称前面加%。

	1.	[root@control ~]# cat  /etc/sudoers         #不要改,下面仅仅是语法格式的示例(例子)
	2.	… …
	3.	root            ALL=(ALL)       ALL
	4.	tom             ALL=(root)      /usr/bin/systemctl
	5.	%wheel      ALL=(ALL)       ALL

实验一:利用ansible实现对用户alice的提权操作

	1)远程所有被管理主机批量创建系统账户,账户名称为alice,密码为123456。
				[root@control ansible]# ansible all -m user -a "name=alice password={{'123456' | password_hash('sha512')}}"
	2)配置alice账户可以提权执行所有命令(control批量授权,node1主机验证)。
		使用lineinfile模块修改远程被管理端主机的/etc/sudoers文件,line=后面的内容是需要添加到文件最后的具体内容。
		等于是在/etc/sudoers文件末尾添加一行:alice ALL=(ALL) NOPASSWD:ALL
				[root@control ansible]# ansible all -m lineinfile 	-a "path=/etc/sudoers line='alice  ALL=(ALL) NOPASSWD:ALL'"
				[root@control ansible]# ssh alice@node1
		如何验证?可以在node1电脑上面使用alice用户执行sudo重启服务的命令看看是否成功。
				[alice@node1 ansible]$ sudo systemctl restart sshd  #不需要输入密码

实验二:假设被控制主机上只可以使用alice这个用户进行操作

		要求:
				•	修改主配置文件
				•	设置ansible远程被管理端主机账户为alice
				•	设置ansible远程管理提权的方式为sudo
				•	修改主机清单文件
				•	修改主机清单配置文件,添加SSH参数
		步骤一:配置普通用户远程管理其他主机
				1)修改主配置文件,配置文件文件的内容可以参考/etc/ansible/ansible.cfg。
						1.	[root@control ansible]# vim ~/ansible/ansible.cfg
						2.	[defaults]
						3.	inventory = ~/ansible/inventory
						4.	remote_user = alice                #以什么用户远程被管理主机(被管理端主机的用户名)
						5.	[privilege_escalation]
						6.	become = true                    #alice没有特权,是否需要切换用户提升权限
						7.	become_method = sudo                #如何切换用户(比如用su就可以切换用户,这里是sudo)
						8.	become_user = root                #切换成什么用户(把alice提权为root账户)
						9.	become_ask_pass = no                #执行sudo命令提权时是否需要输入密码
				2)远程被管理端主机的alice用户,需要提前配置SSH密钥。
						1.	[root@control ansible]# for i in node1  node2  node3  node4  node5
						2.	do
						3.	  ssh-copy-id    alice@$i
						4.	done
				3)修改inventory主机清单配置文件(参考即可,不需要操作)。
						如果个别主机的账户不同,该如何处理呢?
						如果有些主机需要使用密码远程呢?如果有些主机的SSH端口不是22呢?
						1.	[root@control ~]# cat  ~/ansible/inventory
						2.	[test]                    
						3.	node1           ansible_ssh_port=端口号                      #自定义远程SSH端口
						4.	[proxy]
						5.	node2           ansible_ssh_user=用户名                    #自定义远程连接的账户名
						6.	[webserver]
						7.	node[3:4]       ansible_ssh_pass=密码                     #自定义远程连接的密码
						8.	[database]
						9.	node5
						10.	[cluster:children]                
						11.	webserver
						12.	database
		
	PlayBook自动化操作:
			要求:
			•	熟悉Playbook语法格式
			•	编写Playbook管理系统账户
			•	编写Playbook管理逻辑卷
			•	编写Playbook管理软件包
	
	YAML语法格式:
			•	YAML是一个可读性高、用来表达数据序列的格式语言
			•	YAML:YAML Ain't a Markup Language
			•	YAML以数据为中心,重点描述数据的关系和结构
	YAML的格式要求:
			•	"#"代表注释,一般第一行为三个横杠(---)
			•	键值(key/value)对使用":"表示,数组使用"-"表示,"-"后面有空格
			•	":"后面必须有空格
			•	一般缩进由两个或以上空格组成,全文不可以使用tab键
			•	相同层级的缩进必须对齐,缩进代表层级关系
			•	区分大小写
			•	扩展名为yml或者yaml
			•	跨行数据需要使用>或者|,其中|会保留换行符
	Playbook语法格式要求:
			•	使用ansible-playbook命令运行playbook剧本
			•	playbook采用YAML格式编写
			•	playbook文件中由一个或多个play组成
			•	每个play中可以包含:
				•	hosts(主机)、tasks(任务)、vars(变量)等元素组成
					hosts由一个或多个组或主机组成,逗号分隔,
					tasks由name(描述)和模块组成,name可写可不写;asks由一个或多个任务组成,多个任务按顺序执行
					执行ansible-playbook命令可以使用-f选项自定义并发量。
定义多个主机和任务的剧本
1.	[root@control ansible]# vim ~/ansible/test.yml 
2.	- hosts: test,webserver
3.	  tasks:
4.	      - name: This is my first playbook     #name后面的内容可以任意
5.	        ping:
6.	      - name: Run a shell command
7.	        shell: touch ~/shell.txt
8.	#hosts定义需要远程哪些被管理主机,hosts是关键词
9.	#tasks定义需要执行哪些任务,tasks是关键词
10.	#第一个任务调用ping模块,该模块没有参数
11.	#第二个任务调用shell模块在被管理主机创建一个空文件~/shell
12.	[root@control ansible]# ansible-playbook ~/ansible/test.yml  -f   5
验证:到node1、node3、node4主机分别执行命令ls /root/shell.txt查看是否有该文件
	
```c
定义多个play的Playbook文件
1.	[root@control ansible]# vim ~/ansible/test.yml
2.	#第一个play剧目
3.	---
4.	- hosts: test
5.	  tasks:
6.	      - name: This is first play
7.	        ping:
8.	#第二个play剧目
9.	- hosts: webserver
10.	  tasks:
11.	      - name: This is second play
12.	        ping:

Playbook应用案例1:

		用户管理,创建系统账户、账户属性、设置密码(ansible-doc user)。
				1.	[root@control ansible]# vim ~/ansible/test_john.yml
				2.	---
				3.	- hosts: webserver
				4.	  tasks:
				5.	    - name: Add the user 'johnd' 
				6.	      user:
				7.	        name: johnd
				8.	        uid: 1040
				9.	        group: daemon
				10.	    password: "{{ '123' | password_hash('sha512') }}"
				11.	#hosts定义需要远程的对象是webserver组,hosts是关键词
				12.	#tasks定义需要执行的任务,tasks是关键词
				13.	# name是第一个任务的描述信息,描述信息可以任意
				14.	# user是第一个任务需要调用的模块,user下面的缩进内容是给user模块的参数
				15.	# name是需要创建的用户名,uid是用户ID号
				16.	# group是用户属于哪个基本组
				17.	# password是用户的密码,密码是123,密码经过sha512算法加密
		.	
				19.	[root@control ansible]# vim ~/ansible/user_james.yml
				20.	---
				21.	- hosts: webserver
				22.	  tasks:    
				23.	    - name:  Add 'james' with a bash shell
				24.	      user:
				25.	        name: james
				26.	        shell: /bin/bash
				27.	        groups: bin,adm
				28.	        password: "{{ '123' | password_hash('sha512') }}" 
				29.	#与上一个案例类似,groups指定用户属于哪些附加组.
					
				31.	[root@control ansible]# vim ~/ansible/user_johnd.yml
				32.	---
				33.	- hosts: webserver
				34.	  tasks:
				35.	    - name: Remove the user 'johnd'
				36.	      user:
				37.	        name: johnd
				38.	        state: absent
				39.	#删除系统账户johnd,state的值设置为absent是删除用户
	
		2)使用playbook管理逻辑卷
			准备工作:给node2主机再添加一块磁盘(以下实验磁盘名称仅为参考,不要照抄)。(ansible-doc parted,ansible-doc lvg,ansible-doc lvol)
				1.	[root@control ansible]# vim ~/ansible/lvm.yml
				2.	---
				3.	- hosts: node2                            #远程node2主机
				4.	  tasks:
				5.	    - name: Create a new primary partition with a size of 1GiB  #任务的描述信息
				6.	      parted:                                 	   #调用parted模块进行分区         
				7.	        device: /dev/sdb                     #对/dev/sdb磁盘进行分区(磁盘名称不要照抄)
				8.	        label: gpt                                #分区表类型为gpt,或msdos
				9.	        number: 1                              #分区编号(创建第几个分区)
			   10.	    state: present                     #present是创建分区,absent是删除分区
			   11.	     part_start: 1MiB                 #分区的开始位置(默认从最开始位置分区)
			   12.	     part_end: 1GiB                  #分区的结束位置(不写就分到磁盘最后位置)
				13.	 - name: Create a volume group on top of /dev/sdb1     #第二个任务的描述信息
				14.	    lvg:                                  #调用lvg模块,创建VG卷组
				15.	        vg: my_vg                          #要创建的卷组名称
				16.	        pvs: /dev/sdb1                     #使用哪个分区创建PV
				17.	  - name: Create a logical volume of 512m          #第三个任务的描述信息
				18.	    lvol:                                 #调用lvol模块创建LV
				19.	        vg: my_vg                          #使用哪个VG创建LV
				20.	        lv: my_lv                          #需要创建的LV名称
				21.	        size: 512m                         #要创建的LV大小,可以不指定单位,默认单位m

	使用playbook管理软件(ansible-doc yum)
		RHEL或CentOS系统中的软件有组包的概念,使用yum grouplist或者dnf grouplist可以查看组包的名称。
				1.	[root@control ansible]# vim ~/ansible/package.yml
				2.	---
				3.	- hosts: webserver                        #需要远程的主机是谁
				4.	  tasks:                                   #定义剧本需要执行的任务
				5.	    - name: Install a list of packages  #第一个任务的描述信息 
				6.	      yum:                                 #调用yum模块安装软件
				7.	        name:                              #安装软件的名字,它的值有多个,使用数组-
				8.	          - httpd                          #安装httpd软件
				9.	          - mariadb                        #安装mariadb软件
			 10.	          - mariadb-server                #安装mariadb-server
			 11.	    - name: install the 'RPM Development Tools' package group   #第二个任务的描述信息
			 12.	      yum:                                  #调用yum模块安装软件组包
			 13.	        name: "@RPM Development Tools"        #安装哪个组包,@是关键词
			 14.	    - name: update software               #第三个任务的描述信息
			 15.	      yum:                                  #调用yum模块升级软件
			 16.	        name: '*'                           #需要升级哪些软件
			 17.	        state: latest                       #latest代表升级软件
			 18.	#备注:state的值可以是(present|absent|latest)
			 19.	#present代表安装软件(默认是present);absent代表卸载软件
			 20.	#latest代表升级软件

总结:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值