i春秋作家:yanzm

前几周斗哥分享了基线检查获取数据的脚本,但是在面对上百台的服务器,每台服务器上都跑一遍脚本那工作量可想而知,而且都是重复性的操作,于是斗哥思考能不能找到一种方法来实现自动下发脚本,批量执行,并且能取回执行的结果。对比参考学习某些开源的平台都有这么一个特点就是需要安装客户端(说白了就是类似后门木马的插件),客户端的兼容性适应问题不说,而且全部服务器都要装相应的客户端,明显超出斗哥预期的轻量级的实现自动化的初衷,但是办法总比困难多作为老板的省钱小能手身轻如燕的斗哥还真找到一个工具无需安装客户端就能实现自动化运维的工具。

话不多说,斗哥决定先给大家演示一下ansible如何实现基线检查脚本的自动下发,批量执行和结果取回,然后再进一步学习这款工具的安装和使用,以及后期的自动化思路。

0x01 效果演示

环境说明:

主控端:192.168.159.55

节点:192.168.159.92、192.168.159.94

确保主控端和节点的连通性,主控端/tmp目录下已创建好需执行的基线检查脚本。

[PHP] 纯文本查看 复制代码

执行自动化脚本demo,linux_centos7.sh为创建在主控端的基线检查脚本:

脚本执行结束即可在本地的/tmp/check目录下查看到节点的执行结果:

上述的过程,在面对众服务器节点的时候可以省去很多工作量,是不是感觉一下清爽了许多。

but

当节点没有python的情况下,上述脚本是不适用的哦,会出现如下报错提示。

这里先卖个关子,如何实现节点没有安装python的情况下的批量化请继续往下看,斗哥决定先带领大家先来掌握批量脚本涉及的相关知识,工欲善其事必先利其器。

0x02 ansible介绍以及安装

Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric,ps:反正斗哥是没用过啦)的优点,同时ansible最大的优点是不需要在节点中安装任何客户端,它使用SSH来和节点进行通信。 ansible是基于模块工作的,比如常用的script、command、shell、copy、fetch、raw等模块,同时ansible还支持自定义模块和playbook以适应更丰富的自动化运维场景的需求(得益于python的强大基因)。

step1:准备工作

主控端:centos7.5(Red Hat Enterprise Linux,CentOS,Fedora和Ubuntu等发行版都默认安装了python 2.X的解释器,pip不一定是默认安装,如果有安装也需要更新到最新版),具体主控端安装环境要求如下:

ansible的主控端只能安装在类unix的操作系统上,其他发行版的linux安装可以详见ansible中文权威指南-安装管理主机,本文的安装方法仅适用于centos系统。

step2:下载和安装EPEL仓库

[root@root tmp]# wget http://dl.fedoraproject.org/pub/ ... latest-7.noarch.rpm

[root@root tmp]# rpm -ivh epel-release-latest-7.noarch.rpm

step3:安装Ansible以及查看对应的版本

[root@root tmp]# yum -y install ansible

[root@root tmp]# ansible –version

到step3 ansible就已经安装完毕,如果安装在虚拟机的强烈建议这里可以打个快照方便后续的测试调试。step4和step5步骤后面纳入批量化要考虑的需求,但是手工的流程我们先走一遍。

step4:设置用于鉴权的SSH密钥

主控端生成ssh的公私钥,默认生成的密钥保存在/root/.ssh文件夹下

[root@root tmp]# ssh-keygen

主控端向单个节点下发公钥:

[root@root tmp]# ssh-copy-id -i [email]root@192.168.159.61[/email]

step5:添加Ansible定义的节点到host清单

在ansible的配置文件添加host清单,建议根据实际分类对组进行命名。

[root@root tmp]# vi /etc/ansible/hosts

step6:在ansible主控端运行命令测试

[root@root tmp]# ansible -m command -a “ifconfig” ‘webservers’

以上只是针对单个节点的情况下ansible的基本要达到的条件。

0x03 ansible的基础用法、模块的使用条件以及playbook的使用

1. Ansible基本语法如下:

ansible -m -a

指定操作的节点    指定模块名称     为模块指定参数

指的是要操作节点的组名,即/etc/ansible/hosts文件中定义的节点分类的组名或者具体的节点的IP地址或者域名等;

-m 用于指定模块的名称,比如常用的command、script、raw等模块;

-a 定义模块的参数,比如指定模块command后再-a “date”即可查看节点的时间,其他使用以此类推。

2. ansible执行结果的颜色含义:

红色:表示ansible对节点执行的命令出现异常

绿色:表示ansible对节点执行的命令正常执行,并且没有对节点产生修改操作。

黄色:表示ansible对节点执行的命令正常执行,并且对节点产生相应的改动操作。

3. 模块的使用条件:

模块的使用,这里斗哥考虑的是条件是节点是否需要python环境。这里ansible有两个模块是节点是不需要安装python环境就可以使用,分别是raw模块和script模块,其他模块的使用都是基于节点有python环境。

具体的模块的使用条件,参数说明可以在使用相关模块的时候再查读ansible 模块官方文档即可。

4. playbook初识:

playbook其实就是ansible各个模块的组合使用,用专门的yaml语言将一个或多个模块合并在一个playbook里面的组合使用。playbook具体由playbook的角色以及playbook的角色要执行的任务task两部组成,一个playbook由一个或者多个角色(play)组成,一个角色(play)可以包含多个任务(task)。playbook的基本构成看下图:

调用playbook命令的格式:[root@root tmp]#ansible-playbook+参数[options]+playbook文件路径。

栗子: 创建如下playbook:

执行playbook,–tags可指定具体要执行的task:

[root@root tmp]# ansible-playbook –tags t2 playbook.yml

验证执行情况:

0x04 实际问题中自动化的思考

这里斗哥想从实际的需求以及遇到的问题出发来达到轻量级地实现自动化的目标。基于ansible这个开源神器,我们不用直接了解底层ssh的通信原理以及python实现的模块化。在使用ansible这个工具时我们要考虑的批量化需求详见下图分析。

1.基础环境和条件

●基线检查脚本(漏斗公总号回复基线自动化运维可得,当然斗哥手上还有其他操作系统的、中间件、数据库等众多基线脚本,不同的节点运行的脚本的组合不同,这个也需做好分类)

●安装好ansible的主控端主机一台,安装在虚拟机的可以在0x02的step3保存快照。

●需要检查的节点清单(确保开放ssh端口,不是默认22端口的话另分类出来这里暂不做考虑、节点root权限的账号密码)

2.主控端的公钥需要批量下发

主控端通过ssh-keygen命令生成公私钥后,公钥需要下发到节点才可实现主控端对节点的控制,0x02中的是单个节点的公钥下发,并且需要人机交互键入节点ssh密码,显然不适合面对多个节点的下发。

这里斗哥的解决方案是通过expect来实现自动化的交互,以下脚本适用条件于节点无python环境,且节点密码一致的情况。

[root@root tmp]# ./demo

[PHP] 纯文本查看 复制代码

3.基线检查脚本的批量

脚本适用范围:节点未安装python环境,主控端事先创建好要执行的基线脚本。这里斗哥只是使用了ansible的raw和script这两个模块。

[PHP] 纯文本查看 复制代码

以上就是斗哥梳理的整个自动化的流程,拆分每个步骤,针对各个坑点逐一击破,从而实现自动化过程和思考。其实ansible还可以跟其他工具相结合使用,比如和Jenkins结合实现可视化等。如果你有疑问或者不同的见解,欢迎给斗哥留言,期待和大家的交流。

大家有任何问题可以提问,更多文章可到i春秋论坛阅读哟~

自动基线校正 python_安全运维中基线检查的自动化之ansible工具巧用相关推荐

  1. 运维中的交换机堆叠是什么

    运维中的交换机堆叠是什么,堆叠是指将多台支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上虚拟成一台交换设备,作为一个整体参与数据转发.堆叠是目前广泛应用的一种横向虚拟化技术,具有提高可靠性.扩展端 ...

  2. Python在网络运维中的应用与分析

    目前Python是新兴技术编程语言的主流之一,随着互联网技术的不断发展,计算机网络的应用范围也随之增加,网络运维自动化和智能化需求越来越高,Python编程语言逐渐盛行,该程序设计语言简单灵活,拥有庞 ...

  3. 如何应对运维中出现的突发事件问题

    如何应对运维中出现的突发事件问题 虹科PagerDuty在这一方面的功能表现也是十分出色的,可以通过它的现代化事件响应和事件智能化两个功能去解决问题.接下来我们就分别介绍一下这两个强大的功能,当然由于 ...

  4. 实际运维中处理的事故问题

    在IT运维中会遇到的问题 1.缺乏有效的知识积累和共享,造成操作维护效率低下,类似的故障和问题仍然在不断发生,不断解决着,同时一旦某些掌握关键信息和技能的人发生意外状况(如生病,离职等),整个日常维护 ...

  5. mysql使用主从复制迁移,[MySQL进阶之路][No.0003] 主从复制(Replication)在运维中的运用...

    前序 在之前的两章里,主要介绍的主从复制(Replication)的基本使用方法和show slave status一些基本参数,这一章我们讲一下主从复制在生产环境中的一些在运维中的常见用途.下面将要 ...

  6. 28法则在建站、优化、运维中的体现

    28法则在建站.优化.运维中的体现 根据百度百科的解释,28法则也被称之为二八规律.二八定律.巴莱多定律等等,指的是,在任何一组事物中,20%的部分是重要的,剩下的80%都是次要的.二八法则的应用范围 ...

  7. 如何做好python自动化运维,python在运维中的应用

    这篇文章主要介绍了一个有趣的事情,具有一定借鉴价值,需要的朋友可以参考下.希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下. 1.如何做好python自动化运维 随着移动互联网的普及, ...

  8. 2021AIOps挑战赛|基于移动通信网络运维中的多指标时空序列预测

    2021国际AIOps挑战赛决赛暨AIOps创新高峰论坛于2021年5月13日在北京成功举行.本文根据中国移动研究院首席科学家.人工智能与智慧运营中心总经理冯俊兰博士现场发言纪要整理而成. 演讲内容 ...

  9. 桌面运维中持续服务改进需要怎么进行?

    桌面运维中持续服务改进是确保企业内部计算机和网络设备持续运行的关键.以下是一些持续服务改进的方法: 1. 定期更新和维护软件和硬件 桌面运维人员应该定期更新和维护软件和硬件设备,确保它们保持最新和最佳 ...

最新文章

  1. Xcode 小技巧:利用 assets 配置针对不同设备的资源
  2. Servlet开发配置
  3. sentinel的@SentinelResource注解使用
  4. 北京科技计算机与通信工程学院,北京科技大学计算机与通信工程学院-任超
  5. java sentence_Java Sentence類代碼示例
  6. scala java抽象理解_Scala之类、特质和抽象类
  7. Spring源码系列:依赖注入(二)createBean
  8. 深度系统安装移动硬盘启动_深度系统如何安装_电脑知识
  9. 用单片机测量流体流速的_沟渠流量测量系统宝山哪家质量好广州顺仪品牌
  10. WPF - 属性系统 (4 of 4)
  11. BZOJ 4030: [HEOI2015]小L的白日梦
  12. Linux中源码的安装
  13. ov7740摄像头模块
  14. 《指数基金投资从入门到精通》读书笔记
  15. 股市基础知识、主力战法【一】
  16. 现在分词和动名词的用法区别
  17. 中南大学官网计算机学院,中南大学
  18. DENSE_RANK函数
  19. 企业为何需要办公电话系统
  20. 滴滴夜莺发布v3.3.0版本

热门文章

  1. Image-to-Image Translation with Conditional Adversarial Networks
  2. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置...
  3. SpringAOP-基于@AspectJ的简单入门
  4. 01_Flume基本架构及原理
  5. fstab损坏无法开机的修复
  6. Mybatis 单独项目
  7. Win10 UWP vs add github
  8. JAVA 1.5 并发之 Executor框架 (内容为转载)
  9. 关于sliverlight4 打印功能
  10. 四级过了,我却高兴不起来!