ansible
ansible
	
		服务端生成key
		ssh-keygen

		给客户端分发key
		ssh-copy-id root@192.168.16.203
		ssh-copy-id root@10.0.0.200
		
	安装ansible需要配置epel的源可以用阿里云的epel的源	
	安装ansible
		yum install ansible -y
	
	
	配置文件
	vim /etc/ansible/ansible.cfg
		[defaults]												默认配置段
		inventory      = /etc/ansible/hosts						IP列表默认配置文件存放位置
		library        = /usr/share/my_modules/					
		module_utils   = /usr/share/my_module_utils/			模块存放位置,需要第三放模块可以放在这目录里
		remote_tmp     = ~/.ansible/tmp							远程执行命令的临时目录				
		local_tmp      = ~/.ansible/tmp							
		plugin_filters_cfg = /etc/ansible/plugin_filters.yml	插件配置文件
		forks          = 5										指定服务器并发连接数
		poll_interval  = 15										轮训间隔时间默认为15秒,轮训检测客户端结果
		sudo_user      = root									用户默认是root 不需要提权
		ask_sudo_pass = True									密码
		ask_pass      = True									
		transport      = smart									表示传输端口或方式 							
		remote_port    = 22										端口		
		module_lang    = C										模块开发的语言 C语言
		module_set_locale = False								设置模块字符集,默认即可
		
		#gathering = implicit									和客户端通信,采集客户端facts信息,客户端IP 主机名等				
		
	
	基于密码验证
	vim /etc/ansible/hosts
		[web-servers]
		10.0.0.201 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_password=123456
		192.168.16.203 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_password=123456
	
	输入密码执行操作,然后输入密码
	ansible -i /etc/ansible/hosts nginx -m ping
	
	不推荐用for循环
	利用for循环查看ssh执行
		for i in `seq 1 200`;do echo -e "\033[32m10.0.0.$i | CHANGED | rc=0 >>\033[0m";ssh -l root 10.0.0.$i "df -h";done
	
	利用ansible for执行
		for i in `seq 1 200`;do echo -e "\033[32m10.0.0.$i command:\033[0m";ssh -l root 10.0.0.$i "df -h";done 
	

	ansible制定配置文件,执行相关命令可以用-i自定文件
		absible -i /etc/ansible/bjserver -m command -a "df -h" >> /root/123.txt
		
	[web-servers] 组
		
		10.0.0.201 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
		主机IP 端口 用户名和密码
		192.168.16.203 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
		主机IP 端口 用户名和密码
		
	ping客户端
	  第一种
		ansible -i /etc/ansible/hosts web-servers -m ping
		
	 第二种这个要把配置文件写在/etc/ansible/hosts里面才可以
		ansible web-servers -m ping
	 -a
		制定脚本路径或者命令的写法
	  -m
		 指定模块
		 
		 
	  slble-galaxy install 
	  下载网络上的资源下载到本地执行安装
		 
	  command	
		可以调用系统的命令,常见的命令都可以使用,这个命令的执行不是通过shll执行的,像"<,>","|"and "&"操作都不可以,也不支持管道,缺点不支持管道,没法批量执行命令
	
	  shell
		使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用
		
	script
		脚本模块执行制定的脚本可以用这个模块
		
	copy	
		实现主控端向目标主机拷贝文件,类似scp功能,
		
	file
		设置文件属性
		
	stat
		获取远程文件详细属性
		
	get_url
		实现远程主机下载指定url到本地,支持sha256sum文件校验
		
	yum	
		安装软件包
		
	cron
		定时任务相当于定时任务crontab -e和这个命令是一样的
	
	command	
		可以调用系统的命令,常见的命令都可以使用,这个命令的执行不是通过shll执行的,像"<,>","|"and "&"操作都不可以,也不支持管道,缺点不支持管道,没法批量执行命令
	command例:
	
	查看这个web-servers这个组主机的运行时间
		ansible web-servers -m command -a "uptime"
		返回结果:
			10.0.0.201 | CHANGED | rc=0 >>
			05:03:58 up  1:52,  2 users,  load average: 0.08, 0.03, 0.05
			开机时间            2个用户						负载		
			192.168.16.203 | CHANGED | rc=0 >>
			05:03:58 up  1:24,  2 users,  load average: 0.00, 0.01, 0.05
			
	查看系统内核
		ansible web-servers -m command -a "uname -r"

	批量创建用户
		ansible web-servers -m command -a "useradd dj"

			
	查看一个文件里面有没有dj的内容
		ansible web-servers -m command -a "grep dj /etc/passwd"
		
		返回结果:
			10.0.0.201 | CHANGED | rc=0 >>
			dj:x:1000:1000::/home/dj:/bin/bash
			
			192.168.16.203 | CHANGED | rc=0 >>
			dj:x:1000:1000::/home/dj:/bin/bash
	让一条命令的结果输出到/tmp/123.txt下
		ansible web-server -m command -a "df -h" >> /tmp/123.txt

	shell
		使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用
	shell例:
		查看swap分区有没有占用利管道|和grep
		ansible -i /etc/ansible/hosts web-servers -m shell -a "free -m | grep Swap"
			返回结果:
			10.0.0.201 | CHANGED | rc=0 >>
			Swap:          2047           0        2047
			
			192.168.16.203 | CHANGED | rc=0 >>
			Swap:          2047           0        2047	
	注:但是我们自己定义在~/.bashrc或~/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;对shell模块的使用可以分成两块
			
			
	如果待执行的语句少,可以直接写在一句话中:
		ansible -i /etc/ansible/hosts  web-servers -m shell -a "source  ~/.bash_profile && df -h | grep sda3"
	2) 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;
	
	3、scripts模块
	使用scripts模块可以在本地写一个脚本,在远程服务器上执行:
	vim  /etc/ansible/net.sh
		#!/bin/bash
		date
		hostname
	
	script
		脚本模块执行制定的脚本可以用这个模块
	script例:
		ansible web-servers -m script -a "/etc/ansible/net.sh"


	copy	
		实现主控端向目标主机拷贝文件,类似scp功能
	copy例
		1把ansible主机上的hosts文件复制到主机组中机器的/tmp/目录下
			ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/etc/hosts dest=/tmp owner=root group=root mode=0755"
		解释:
			src	
				原目录
			dest
				目标目录
			
			owner
				属主权限
				
			group
				属组的权限
				
			mode
				权限
		
		修改文件权限
			例
				ansible web-servers -m file -a "path=/tmp/hosts mode=0777"
			
			file
				文件类型
			path
				文件路径
				
				
		backup
			备份
		备份文件
		ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/etc/hosts dest=/tmp backup=yes"
			
		content
			创建新的文件
			
		ansible -i /etc/ansible/hosts web-servers -m copy -a "content='oldboy123' dest=/backup/rsync.password"
		
		
		stat
			获取远程文件详细属性
		stat
			例:
				获取远程文件详细属性
				ansible web-servers -m stat -a /tmp/hosts
				
		get_url
			实现远程主机下载指定url到本地,支持sha256sum文件校验		
		get_url
			ansible web-servers -m get_url -a "url=http://192.168.16.235/centos7.repo dest=/root/ mode=0775 force=yes"
			解释:
				url=
					后面跟上要下载的连接地址
					
				dest=
					目标也就是下载要下载到那个目录里面
				mode=
					需要给文件的指定文件权限
				force=yes
					当下载文件时,如果所下的内容和原目录下的文件内容不一样,则替换原文件,如果一样,就不下载了,通过MD5值判断
					如果为“否”,则仅在目标不存在时才下载文件。 一般来说,只有小型本地文件才应该为“是”。 在0.6之前,该模块表现为默认为“是”。
					
		用yum安装httpd的rpm包			
		yum
			例
			ansible web-servers -m yum -a "name=httpd state=latest"
					
			state参数:用于指定软件包的状态 ,默认值为present,表示确保软件包已经安装; 其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。		
					
					
		cron
		定时任务相当于定时任务crontab -e和这个命令是一样的
			例子
				每30分钟执行一次ls /tmp/
				
			ansible web-servers -m cron -a "name='list dir' minute='*/30' job='/usr/bin/ls /tmp'"
				
				
		批量删除定时任务
			
			ansible web-servers -m cron -a "name='list dir' minute='*/30' job='/usr/bin/ls /tmp' state=absent" 	
				
				
			absent
				缺席
			
		临时关闭定时任务
			ansible web-servers -m cron -a "name='list dir' minute='*/30' job='/usr/bin/ls /tmp' disabled=yes"	
				
				
		从一台服务器复制文件到本地,并把相关配置文件放在远程主机的IP地址的目录
			ansible 10.0.0.41 -m fetch -a "src=/etc/redis.conf dest=./"		
				
				
				
				
				
				
				
				
				
				
					
				
		

image.png

本文 暂无 评论

Top