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

相关推荐
Kusunoki_D36 分钟前
速查 Linux 常用指令 II
linux·运维·服务器
xmweisi021 小时前
Ansible内置模块之 group
linux·运维·ansible·rhce·rhca·红帽认证
小猪写代码1 小时前
Ubuntu 系统默认已安装 python,此处只需添加一个超链接即可
linux·python·ubuntu
孤寂大仙v2 小时前
【Linux笔记】——Linux线程理解与分页存储的奥秘
linux·运维·笔记
有谁看见我的剑了?2 小时前
ubuntu 22.04 wifi网卡配置地址上网
linux·运维·ubuntu
码农新猿类3 小时前
Ubuntu摄像头打开失败
linux·运维·ubuntu
jstart千语3 小时前
【消息队列】RabbitMQ基本认识
java·服务器·分布式·rabbitmq
PWRJOY3 小时前
Ubuntu磁盘空间分析:du命令及常用组合
linux·运维·ubuntu
ASDyushui3 小时前
Shell 编程之正则表达式与文本处理器
linux·正则表达式
wanhengidc3 小时前
SCDN能够运用在物联网加速当中吗?
运维·服务器·网络