当前位置:网站首页 > 黑客培训 > 正文

安全运维中基线检查的自动化之ansible工具巧用

freebuffreebuf 2018-10-22 284 0

本文来源:i_春秋

i春秋作家:yanzm

原文来自:安全运维中基线检查的自动化之ansible工具巧用

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

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

0x01 效果演示

环境说明: 

主控端:192.168.159.55 

节点:192.168.159.92、192.168.159.94 

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


#!/bin/bash

 

#主控端生成密钥

 

ssh-keygen -t rsa

 

#将节点加入/etc/ansible/hosts,增加的可参照下面的格式添加

 

echo "[web]" >> /etc/ansible/hosts

 

echo "192.168.159.92 ansible_ssh_pass=root" >> /etc/ansible/hosts

 

echo "192.168.159.94 ansible_ssh_pass=root" >> /etc/ansible/hosts

 

#记录节点密钥,新增节点参照下面的格式进行添加

 

ssh-keyscan 192.168.159.92 >> /root/.ssh/known_hosts

 

ssh-keyscan 192.168.159.94 >> /root/.ssh/known_hosts

 

#创建playbook

 

touch /etc/ansible/push-ssh.yml

 

echo "---" >> /etc/ansible/push-ssh.yml

 

echo "- hosts: web" >> /etc/ansible/push-ssh.yml

 

echo "  user: root" >> /etc/ansible/push-ssh.yml

 

echo "  tasks:" >> /etc/ansible/push-ssh.yml

 

echo "    - name: ssh-key-copy" >> /etc/ansible/push-ssh.yml

 

echo "      authorized_key: user=root key=\"{{lookup('file','/root/.ssh/id_rsa.pub')}}\"" >> /etc/ansible/push-ssh.yml

 

echo "      tags:" >> /etc/ansible/push-ssh.yml

 

echo "        - sshkey" >> /etc/ansible/push-ssh.yml

 

#执行playbook

 

ansible-playbook /etc/ansible/push-ssh.yml

 

#测试

 

ansible web -m ping 

 

#主控端创建脚本,在节点执行

 

mkdir /tmp/check

 

ansible web -m script -a "/tmp/linux_centos7.sh"

 

#ansible web -m raw -a "ls /tmp/check"

 

#取回脚本执行结果,保存在/tmp/check/目录下

 

result=(`ansible web -m raw -a "ls /tmp/check" | grep dict | awk '{print $1}'`)

 

for i in ${result[@]}

 

do

 

ansible ${i:13:14} -m raw -a "cat /tmp/check/$i" >> /tmp/check/$i

 

done


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

image.png

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

image.png

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

but 

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


image.png

这里先卖个关子,如何实现节点没有安装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不一定是默认安装,如果有安装也需要更新到最新版),具体主控端安装环境要求如下:

image.png

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

step2:下载和安装EPEL仓库 

[root

转载请注明来自网盾网络安全培训,本文标题:《安全运维中基线检查的自动化之ansible工具巧用》

标签:安全运维Ansible

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表