概述:
博主不再对ansible的安装,部署,以及一些理论,基础知识做介绍,只针对于比较急切需要通过ansible去实现批量处理任务的伙伴,话不多说,直接上干货。
配置干货:
ansible添加组:
vi /etc/ansible/hosts
格式如下:
组名:[test]
ip或者hostname
ip或者hostname
ip或者hostname
示例:
补充一种常见情况:
无权限问题:
(1)有时候远端机器禁止使用root远程登陆,但是需要ansible来实现切换用户文件分发。
(2)无root用户操作权限的时候,如何使用普通用户来在远端服务器没有root权限的目录来执行一些例如mkdir,chmod等等的一些操作命令,并且不用反复输入密码。
(3)普通用户想执行sudo权限。
最简单的解决方法:
(1)修改ansible.cfg文件
将become前两行注释取消
vi /etc/ansible/ansible.cfg
[test-abc]
become=True
become_method=sudo
#become_user=root
#become_ask_pass=False
(2)修改ansible的hosts文件
vi /etc/ansible/hosts
# 组配置写成例如以下样子
[singapore-idc]
10.128.1.88 ansible_ssh_user=test ansible_ssh_pass='test123' ansible_become_pass='test123'
(3)服务器安装sshpass工具
# ubuntu
sudo apt-get install sshpass
# centos
yum intall sshpass
(4)执行ansible命令
# 修改前
test@zzz:~$ ansible test -m shell -a "mkdir -p /root/ansible/test"
200.151.223.1 | FAILED | rc=1 >>
mkdir: 无法创建'/root/ansible/test': 权限不够
# 未安装sshpass
test@zzz:~$ ansible test -m shell -a "mkdir -p /root/ansible/test"
"200.151.223.1 | FAILED | rc=0 >>
ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program
# 安装并修改后
test@zzz:~$ ansible test -m shell -a "mkdir -p /root/ansible/test"
200.151.223.1 | SUCCESS | rc=0 >>
示例:
操作干货:
(1)ansible批量分发文件到远端服务器--copy模块
参数:
src:要拷贝的目录以及文件
dest:远端服务器保存文件的目录
owner:文件属主
group:文件属组
mode:文件权限
命令演示:
ansible -i /etc/ansible/hosts test -m copy -a "src=/tmp/zabbix_agent-5.0.17-linux-4.12-ppc64le-static.tar.gz dest=/home/adm_chaowu.zhang/ owner=root group=root mode=0777"
(2)ansible在远端服务器解压文件--unarchive模块
两种用法:
1、将ansible主机上的压缩包在本地解压缩后传到远端服务器上,这种情况下,copy=yes,本地解压缩,解压缩位置不是默认的目录
2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no ,远程主机上面的操作,不涉及ansible服务端
参数:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远端服务器上的路径,如果是远端服务器上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
命令演示:
ansible -i test -m unarchive -a 'src=/etc/bin/zabbix_agent.tar.gz dest=/usr/local copy=no mode=0755'
或者不太理解或者不想用直接走shell命令的方式
命令演示:
ansible -i /etc/ansible/hosts test -m shell "tar -zxvf /etc/bin/zabbix_agent.tar.gz -C /usr/local"
(3)ansible在远端服务器执行命令--shell模块(最常用)
命令演示:
ansible -i /etc/ansible/hosts check17662042 -m shell -a "chmod 755 /var/log/messages"
(4)ansible批量杀掉远端服务器应用进程--shell模块
命令演示:
ansible test -m shell -a "ps -ef | grep zabbix |grep -v grep |awk '{print \$2}' | xargs kill -9"