0、本文批量安装使用ansible加shell脚本的方法,首先安装ansible
1、修改ansible-server端免交互登录
cat /etc/ssh/ssh_config
1 2
| StrictHostKeyChecking no UserKnownHostsFile /dev/null
|
修改好配置后,重新启动sshd服务即可,命令为:/etc/init.d/sshd restart (或 service sshd restart 或/bin/systemctl restart sshd.service)
2、编辑/etc/ansible/hosts主机配置文件
cat /etc/ansible/hosts
1 2 3 4
| [test] 172.29.25.196 ansible_ssh_private_key_file=/root/test ansible_ssh_user=centos 172.29.16.6 ansible_ssh_private_key_file=/root/test ansible_ssh_user=centos 172.29.20.97 ansible_ssh_private_key_file=/root/test ansible_ssh_user=centos
|
hosts文件使用参数详解
1 2 3 4 5 6 7 8 9 10 11
| ansible_ssh_host #用于指定被管理的主机的真实IP ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22 ansible_ssh_user #ssh连接时默认使用的用户名 ansible_ssh_pass #ssh连接时的密码 ansible_sudo_pass #使用sudo连接用户时的密码 ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径 ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项 ansible_shell_type #目标系统的shell的类型,默认sh ansible_connection #SSH 连接的类型: local , ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh(支持的前提) ansible_python_interpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径 ansible_*_interpreter #其他解释器路径,用法和ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语言
|
上例中使用的是私钥和用户名,如果想要使用执行端口,密码,用户名可参考上面详解参数。
3、编辑批量上传脚本
cat /etc/ansible/scopy-test-zabbix.sh
1 2 3 4 5 6 7
| - hosts: test remote_user: centos tasks: - name: scopy zabbix to all hosts copy: src="/root/zabbix-3.4.2.tar.gz" dest="/home/centos/zabbix-3.4.2.tar.gz" - name: scopy zabbix-agent config to all hosts copy: src="/home/centos/execute-zabbix.sh" dest="/home/centos/execute-zabbix.sh"
|
src:代表本机的源文件,dest代表目标端的路径
hosts:要与/etc/ansible/hosts下的[test]保持一致。
execute-zabbix.sh脚本为安装zabbix-agent脚本
cat /home/centos/execute-zabbix.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #!/bin/sh mkdir /home/zabbix useradd -r -s /sbin/nologin zabbix yum -y install gcc gcc-c++ pcre-devel openssl-devel mv /home/centos/zabbix-3.4.2.tar.gz /home/zabbix/ cd /home/zabbix tar -zxvf zabbix-3.4.2.tar.gz cd zabbix-3.4.2 /home/zabbix/zabbix-3.4.2/configure --prefix=/usr/local/zabbix --enable-agent --with-openssl make make install #host1=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $3}'` host1=`ip addr |grep dynamic |awk '{print $2}'|awk -F'/' '{print $1}'` echo "LogFile=/tmp/zabbix_agentd.log Server=172.29.12.85 ServerActive=172.29.12.85 Hostname=$host1"> /usr/local/zabbix/etc/zabbix_agentd.conf
cp /home/zabbix/zabbix-3.4.2/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/ ln -s /usr/local/zabbix/etc/zabbix_agentd.conf /usr/local/etc/zabbix_agentd.conf sed -i 's/BASEDIR=\/usr\/local/BASEDIR=\/usr\/local\/zabbix/g' /etc/init.d/zabbix_agentd service zabbix_agentd start chkconfig --add zabbix_agentd chkconfig --level 35 zabbix_agentd on netstat -lnpt | grep zabbix_agent
|
server端的ip地址根据自己的zabbix-proxy或者zabbix-server自行定义。
执行批量脚本将文件上传到目标端:
1
| ansible-playbook /etc/ansible/scopy-test-zabbix.sh
|
在ansible-server端执行批量安装脚本
1
| ansible test -m command -a 'sudo sh /home/centos/execute-zabbix.sh'
|
4、编辑查看zabbix-agent进程的脚本,并批量上传到被监控端
编辑检查zabbix-agent进程脚本
cat /home/centos/check-zabbix-port.sh
1 2
| #!/bin/bash netstat -tunlp |grep 10050
|
编辑批量上传脚本
cat /etc/ansible/scopy-test-check-zabbixport.sh
1 2 3 4 5
| - hosts: test remote_user: centos tasks: - name: scopy zabbix-check-port to all hosts copy: src="/home/centos/check-zabbix-port.sh" dest="/home/centos/check-zabbix-port.sh"
|
执行批量上传脚本
1
| ansible-playbook /etc/ansible/scopy-test-check-zabbixport.sh
|
在ansible-server服务端执行检查脚本
1
| ansible test -m command -a 'sudo sh /home/centos/check-zabbix-port.sh'
|