ansible角色(ansible-galaxy)、ansible加密解密(ansible-vault)、ansible实现sudo提权、特殊的主机清单变量

复制代码
一、ansible角色(ansible-galaxy)
二、ansible加密解密(ansible-vault)
三、ansible实现sudo提权   
四、特殊的主机清单变量

       
一、Ansible角色
	Roles产生原因
	在实际生产环境中,为了实现不同功能,我们会编写大量的Playbook文件
	每个Playbook文件可能还会调用其他文件,如变量文件
	对于海量的、无规律的文件,管理起来是一件非常困难的事情
        
1.什么是Roles:层次性、结构化的目录结构	
	 
	(1)角色初始化:
		anisble-galaxy init roles/motd
       
	(2)列出已有角色:
		ansible-galaxy list
	
	(3)目录结构
	    --roles目录
		   --各种角色
			--角色的目录
	files/   tasks/     vars/      meta/      default/  templates/  handlers/
		  main.yml  main.yml   main.yml    main.yml               main.yml
	        
	1)files目录
		存放上传的文件(例如copy模块或script模块调用的文件)
       
	2)templates目录
		存放Jinja2模板文件(当使用template模块时)
       
	3)tasks目录
		角色的任务列表。main.yml文件可以使用include指令包含其他位于此目录中的task文件。
       
	4)handlers目录
		触发条件时执行的动作
        
	5)vars目录(优先级高)
		定义角色变量
       
	6)defaults目录
		定义角色默认变量。当没有在vars目录中定义变量时,会使用defaults目录中的默认变量
       
	7)meta目录
		作者邮箱等信息
	
	8)README

	
二、Ansible加密解密(ansible-vault)
	(1)对文件加密:加密后文件内容变成秘文
	(2)--vault-password-file:指定密码文件,对文件加密,解密,将密码写在密码文件里面
	(3)--ask-vault-password:执行加密的剧本提示输入密码

	(1)对文件加密
		ansible-vault decrypt hello.txt 

	## 常用选项
	    encrypt:加密
	    decrypt:解密
	    view:查看
	    rekey:重置密码

		

	(2)--vault-password-file:指定密码文件,对文件加密解密

		echo "tedu.cn" > pass.txt		
		echo "Hello Linux" > data.txt
		ansible-vault encrypt --vault-password-file=pass.txt data.txt 
		
	(3)--ask-vault-password:执行加密的剧本

		ansible-vault encrypt user_test.yml 
		ansible-playbook --ask-vault-password user_test.yml 
		Vault password: 123456


三、ansible实现sudo提权 

	1.普通sudo提权配置方式(修改/etc/sudoers文件)

		(1)格式:
			用户名或组名(%groupname) 在集中认证域中有效,单机忽略      可以执行的命令列表
			   用户/%组                 ALL=(ALL)           NOPASSWD:ALL(所有权限都没密码)

		(2)例子:给用户提权
			zs,lisi ALL=(ALL) /usr/sbin/useradd, /usr/sbin/usermod -G somegroup

	2.ansible实现sudo提权

		(1)# 被控节点创建用户并配置sudo提权
			[root@pubserver ansible]# vim sudouser.yml 
			---
			- name: sudo user
			  hosts: all
			  tasks:
			    - name: create sudo user
			      user:
			        name: alice
			        password: "{{'123456'|password_hash('sha512')}}"
			        state: present
			    - name: config sudo
			      lineinfile:
			        path: /etc/sudoers
			        line: "alice ALL=(ALL) NOPASSWD: ALL"
			        state: present

		(2)# 修改ansible配置文件
			[root@pubserver ansible]# vim ansible.cfg 
				[defaults]
				inventory = inventory
				host_key_checking = false
				module_name = shell
				nocows = true
				roles_path = ./roles
				remote_user = alice

				[privilege_escalation]
				become = true
				become_method = sudo
				become_user = root
				become_ask_pass = false
		
		(3)# 配置ssh使用alice用户免密登录,alice密码123456
			[root@pubserver ansible]# for i in web1 web2 db1
				 do
				 ssh-copy-id alice@$i
				 done
		
		(4)# 测试:ansible all -m ping
		

四、特殊的主机清单变量
	如某个被控节点不能"免密登录"(登录必须要密码)、ssh服务端口不是标准22端口等情况
	则需要配置特殊的主机清单变量

	## 常用配置
	    ansible_ssh_host:指定被控节点服务器IP地址
	    ansible_ssh_user:指定登陆远程主机的用户名
	    ansible_ssh_pass:指定登陆远程主机的密码
	    ansible_ssh_port:指定登陆远程主机的端口号

	1.操作演示
	(1)# 调整web1主机配置用于测试
	[root@web1 ~]# rm -rf /root/.ssh/authorized_keys            #清理公钥恢复密码登录
	[root@web1 ~]# systemctl disable --now firewalld            #关闭防火墙
	[root@web1 ~]# vim +17 /etc/ssh/sshd_config                 #配置ssh端口为2222
	Port 2222
	[root@web1 ~]# systemctl restart sshd                       #重启sshd服务
	
	# 调整pubserver的hosts文件注释web1主机名解析
	[root@pubserver ansible]# vim /etc/hosts
	...
	#192.168.88.11  web1
	
	ssh web1 -p 2222

	(2)# 配置特殊的主机清单变量
	[root@pubserver myansible]# vim inventory 
	[group1]
	web1 ansible_ssh_host=192.168.88.11 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass=a
	web2
	db1

	# 测试特殊的主机清单变量,可以成功
	[root@pubserver myansible]# ansible all -m ping

一、ansible角色(ansible-galaxy)

二、ansible加密解密(ansible-vault)

三、ansible实现sudo提权

四、特殊的主机清单变量

一、Ansible角色

Roles产生原因

在实际生产环境中,为了实现不同功能,我们会编写大量的Playbook文件

每个Playbook文件可能还会调用其他文件,如变量文件

对于海量的、无规律的文件,管理起来是一件非常困难的事情

1.什么是Roles:层次性、结构化的目录结构

(1)角色初始化:

anisble-galaxy init roles/motd

(2)列出已有角色:

ansible-galaxy list

(3)目录结构

--roles目录

--各种角色

--角色的目录

files/ tasks/ vars/ meta/ default/ templates/ handlers/

main.yml main.yml main.yml main.yml main.yml

1)files目录

存放上传的文件(例如copy模块或script模块调用的文件)

2)templates目录

存放Jinja2模板文件(当使用template模块时)

3)tasks目录

角色的任务列表。main.yml文件可以使用include指令包含其他位于此目录中的task文件。

4)handlers目录

触发条件时执行的动作

5)vars目录(优先级高)

定义角色变量

6)defaults目录

定义角色默认变量。当没有在vars目录中定义变量时,会使用defaults目录中的默认变量

7)meta目录

作者邮箱等信息

8)README

二、Ansible加密解密(ansible-vault)

(1)对文件加密:加密后文件内容变成秘文

(2)--vault-password-file:指定密码文件,对文件加密,解密,将密码写在密码文件里面

(3)--ask-vault-password:执行加密的剧本提示输入密码

(1)对文件加密

ansible-vault decrypt hello.txt

常用选项

encrypt:加密

decrypt:解密

view:查看

rekey:重置密码

(2)--vault-password-file:指定密码文件,对文件加密解密

echo "tedu.cn" > pass.txt

echo "Hello Linux" > data.txt

ansible-vault encrypt --vault-password-file=pass.txt data.txt

(3)--ask-vault-password:执行加密的剧本

ansible-vault encrypt user_test.yml

ansible-playbook --ask-vault-password user_test.yml

Vault password: 123456

三、ansible实现sudo提权

1.普通sudo提权配置方式(修改/etc/sudoers文件)

(1)格式:

用户名或组名(%groupname) 在集中认证域中有效,单机忽略 可以执行的命令列表

用户/%组 ALL=(ALL) NOPASSWD:ALL(所有权限都没密码)

(2)例子:给用户提权

zs,lisi ALL=(ALL) /usr/sbin/useradd, /usr/sbin/usermod -G somegroup

2.ansible实现sudo提权

(1)# 被控节点创建用户并配置sudo提权

root@pubserver ansible\]# vim sudouser.yml --- - name: sudo user hosts: all tasks: - name: create sudo user user: name: alice password: "{{'123456'\|password_hash('sha512')}}" state: present - name: config sudo lineinfile: path: /etc/sudoers line: "alice ALL=(ALL) NOPASSWD: ALL" state: present (2)# 修改ansible配置文件 \[root@pubserver ansible\]# vim ansible.cfg \[defaults

inventory = inventory

host_key_checking = false

module_name = shell

nocows = true

roles_path = ./roles

remote_user = alice

privilege_escalation

become = true

become_method = sudo

become_user = root

become_ask_pass = false

(3)# 配置ssh使用alice用户免密登录,alice密码123456

root@pubserver ansible\]# for i in web1 web2 db1 do ssh-copy-id alice@$i done (4)# 测试:ansible all -m ping 四、特殊的主机清单变量 如某个被控节点不能"免密登录"(登录必须要密码)、ssh服务端口不是标准22端口等情况 则需要配置特殊的主机清单变量 ## 常用配置 ansible_ssh_host:指定被控节点服务器IP地址 ansible_ssh_user:指定登陆远程主机的用户名 ansible_ssh_pass:指定登陆远程主机的密码 ansible_ssh_port:指定登陆远程主机的端口号 1.操作演示 (1)# 调整web1主机配置用于测试 \[root@web1 \~\]# rm -rf /root/.ssh/authorized_keys #清理公钥恢复密码登录 \[root@web1 \~\]# systemctl disable --now firewalld #关闭防火墙 \[root@web1 \~\]# vim +17 /etc/ssh/sshd_config #配置ssh端口为2222 Port 2222 \[root@web1 \~\]# systemctl restart sshd #重启sshd服务 # 调整pubserver的hosts文件注释web1主机名解析 \[root@pubserver ansible\]# vim /etc/hosts ... #192.168.88.11 web1 ssh web1 -p 2222 (2)# 配置特殊的主机清单变量 \[root@pubserver myansible\]# vim inventory \[group1

web1 ansible_ssh_host=192.168.88.11 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass=a

web2

db1

测试特殊的主机清单变量,可以成功

root@pubserver myansible\]# ansible all -m ping

相关推荐
matlab的学徒12 分钟前
Web与Nginx网站服务(改)
linux·运维·前端·nginx·tomcat
Insist75317 分钟前
prometheus安装部署与alertmanager邮箱告警
linux·运维·grafana·prometheus
BAGAE1 小时前
MODBUS 通信协议详细介绍
linux·嵌入式硬件·物联网·硬件架构·iot·嵌入式实时数据库·rtdbs
灿烂阳光g1 小时前
SELinux 策略文件编写
android·linux
xqlily1 小时前
Linux操作系统之Ubuntu
linux·运维·ubuntu
阿部多瑞 ABU1 小时前
《基于国产Linux的机房终端安全重构方案》
linux·安全
倔强的石头1062 小时前
【Linux指南】Makefile入门:从概念到基础语法
linux·运维·服务器
ajassi20002 小时前
linux C 语言开发 (七) 文件 IO 和标准 IO
linux·运维·服务器
程序猿编码2 小时前
基于 Linux 内核模块的字符设备 FIFO 驱动设计与实现解析(C/C++代码实现)
linux·c语言·c++·内核模块·fifo·字符设备
一只游鱼2 小时前
Zookeeper介绍与部署(Linux)
linux·运维·服务器·zookeeper