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

相关推荐
云云3213 分钟前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately22 分钟前
centos单机部署seata
linux·运维·centos
魏 无羡24 分钟前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse27 分钟前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
木子Linux1 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8241 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维1 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops2 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
不惑_2 小时前
小白入门 · 腾讯云轻量服务器部署 Hadoop 3.3.6
服务器·hadoop·腾讯云
阿甘知识库2 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站