ansible简单使用(无理论,应急教程)

一:安装并配置ansible

#安装
yum -y install ansible sshpass
或
apt -y install ansible sshpass
#跳过第一次连接检测询问是否登陆的提示(YES/NO)
sed -i "/host_key_checking = False/a\host_key_checking=False" /etc/ansible/ansible.cfg

#sshpass作用:ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。

二:配置hosts主机组(可选择任意当前主机登录用户有权限执行的文件创建hosts)

[all]
all主机组所有ip
#192.168.1.2
#192.168.1.3
#....
[all:vars]
ansible_user=user
ansible_ssh_pass=123456
ansible_sudo_pass=123456
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_port=22

三:ansible基本模块的使用(包括ping,shell,script,copy,fetch五个常用模块)

  • ping模块的使用
  • 作用:测试当前主机与hosts文件all组中的网络连通性
ansible all -m ping  -i hosts -f 400
#参数详解 all:指定主机组
		 -m:指定ansible所使用的的模块
		 -i:指定hosts文件路径(可为绝对路径)
		 -f: 并发量(是主机性能或all组中主机数指定)
  • shell模块的使用
    作用:在all主机组中执行普通shell命令
#批量安装软件
ansible all -m shell -a ‘apt -y install vim’  -i hosts -b -f 400
#参数详解 -a shell模块支持的命令(大多数命令)
		 -b 以root权限在远程主机执行该shell命令
#多命令执行
ansible all -m shell -a ‘apt -y install vim;ip a’  -i hosts -b -f 400	 
#测试远程主机与某主机的联通性(百度对运维来讲就是用来ping的)
ansible all -m shell -a ‘ping baidu.com -c 4’  -i hosts -b -f 400
#注意:shell命令中 -c 即ping命令的执行次数一定要制定下,因为linux系统默认会一直ping,不然会误以为是卡死的现象 
#与ping模块的区别可理解为ping模块是由ansible主机向all主机组发送数据包,
#而shell是将ping命令通过shell模块发送到all主机组中执行
  • script模块的使用
    作用:将本地脚本文件在远程主机上执行(在使用中对系统环境不同的主机组不是太友好,建议使用copy+shell模块相结合的方式执行脚本文件)
#将某软件的安装脚本在all组中的主机中执行
ansible all -m script -a ‘install.sh’  -i hosts -b -f 400
  • copy模块的使用
    作用:将ansible主机中的文件copy到all组中主机的指定目录下
#将本地的某软件的安装脚本copy到远程主机的/tmp/路径下
ansible all -m copy -a 'src=./install.sh dest=/tmp/' -i hosts -b -f 400
  • fetch模块的使用
    作用:将all组中的指定文件拷贝到ansible主机中的
#将远程主机中的临时文件copy到ansible主机的/tmp/路径下
ansible all -m fetch -a 'src=/root/tmp.txt dest=/tmp/' -i host -b -f 400

四:自以为是小技巧

  1. 当all组中中的主机较多是,返回结果往往一个较多,导致命令行无法查看全部内容可选择将输出结果输出到临时文件(列:tmp.sh)中,通过筛选关键字来查看各类问题主机,
ansible all -m shell -a ‘ping baidu.com -c 4’  -i hosts -b -f 400 >tmp.sh
#查看执行成功的主机ip
cat tmp.sh |grep rc=0 |awk -F ' ' '{print $1}'cat tmp.sh |grep SUCCESS |awk -F ' ' '{print $1}'
#查看执行成功但无返回值的主机
cat tmp.sh |grep “rc=0|awk -F ' ' '{print $1}'
#查看端口拒绝链接导致超时或主机不存在
cat tmp.sh |grep -B 3 port |grep = |awk -F ' ' '{print $1}'
#查看用户密码错误机器
cat tmp.sh |grep -B 3 Authentication |grep = |awk -F ' ' '{print $1}'
#查看需首次连接检测询问是否登陆的提示(YES/NO)--改变若安装时已配置那就换台ansible主机重试下
cat tmp.sh |grep -B 3 Permiss |grep UN |awk -F ' ' '{print $1}'

 

辅助代码:测试多个网段中的存活机器

from multiping import MultiPing
#需要检测那先网段中的机器连通性,在hosts中的主机列表为网络中存在的主机

networks=['172.28.101','172.28.105']

ips = []
ping_connects = []
no__ping_connects = []
#或取network中所有ip
for network in networks:
    for i in range(2,254):
        ip = network+'.' + str(i)
        ips.append(ip)
mp=MultiPing(ips)
mp.send()
responses = mp.receive(2)

for key in responses[0].keys():
    ping_connects.append(key)
    file_path = 'hosts'
    with open(file_path, mode='a', encoding='utf-8') as file_obj:
        file_obj.write(key + '\n')
print('本机能够ping的通的主机数:'+len(ping_connects))
no_ping_connects=responses[1]
print('本机不能够ping的通的主机数'+en(no_ping_connects))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值