学习python自动化运维的第九天

学习python自动化运维的第九天

今天学习的内容为对Linux服务器进行病毒查杀,所以,首先需要在Linux中安装免费的杀毒软件clamav,安装过程可参考其他博主的文章。我的参考文章是这篇文章;使用yum安装即可,如果虚拟机服务器无法访问互联网,可以通过离线的方式安装(参考其他文章吧,我的可以联网,就不讲述了)。
之后,在本地主机中安装python的第三方库,用于远程到Linux服务器上,通过远程执行命令的方式,获取扫描结果

pip install paramiko

当出现面对的服务器过多的情况,可以通过多线程的方式,同时对多台服务器进行扫描,以此提高工作的效率。具体的实现代码如:

# -*- coding: utf-8 -*-
"""学习python自动化运维的第九天"""

"""
        从今天开始学习python与系统安全
    通过在服务端安装clamav免费的杀毒软件,
    然后通过python的paramiko库远程获取扫描结果
"""

import paramiko
from threading import Thread
import time
class Scan(Thread):   # 多线程的类继承
    def __init__(self,IP,scan_path):  # 需要参数扫描终端地址和扫描路径
        Thread.__init__(self) # 线程初始化
        self.IP = IP
        self.scan_path = scan_path
        self.connstr = [self.IP]
        self.error = ""
    def run(self):
        try:
            result,client = [],paramiko.SSHClient()    # 创建一个连接对象
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())    # 第一次连接自动选择yes,不加可以进行选择
            client.connect(hostname=self.IP,port=22,username='root',password='Wang123456')   # 连接服务器
            client.exec_command("freshclam")    # 更新病毒库
            now_time = time.strftime('%Y-%m-%d-%H%M%S',time.localtime(time.time()))  # 获取当前系统时间
            print("准备扫描目录: ",self.scan_path)
            command = "clamscan -ri {} > /clamav/log/clamav-log-{}.log".format   # 文件夹扫描
            stdin, stdout, stderr = client.exec_command(command(self.scan_path,now_time))   # 命令执行
            i=0
            while True:
                i+=1
                if stdout.channel.exit_status_ready():   # 判断命令是否执行完成,完成则跳出循环,否则等待等待1秒
                    break
                time.sleep(1)
                print("\r扫描已用时%s秒"%i,end="",flush=True)  # 覆盖打印输出
            cmd1 = "cat /clamav/log/clamav-log-%s.log"%(now_time)
            stdin, stdout, stderr = client.exec_command(cmd1)  # 读取扫描结果
            for line in stdout.readlines():
                result.append(line.strip())   # 将获取的结果格式化(否则后面答印有空行)
            client.close()
            self.connstr += result # 保存扫描结果,用于外部读取
        except TimeoutError as T :
            self.error = self.IP+ "连接错误:" + str(T) # 保存连接错误的结果(服务器不存在,或者未开机,22端口未开放,总之,paramiko连接不上)
r =1   # 定义循环标志
threadnum = 2   # 指定开启线程数量
IPs = ["192.168.186.152","192.168.186.151","192.168.186.150"]  # 定义扫描主机列表,不能同时多线程扫描一台主机
scanlist = [] # 创建线程列表
for ip in IPs:
    currp = Scan(ip,"/tmp")    # 使用线程类
    scanlist.append(currp)
    if r %threadnum == 0 or r == len(IPs):  # 满足条件则开启线程
        for task in scanlist:
            task.start()   # 开启线程
        for task in scanlist:
            task.join()  # 等待所有子线程结束,
            for line in task.connstr: # 获取返回结果
                print(line)
            if task.error != "":
                print(task.error)
        scanlist.clear()   # 清除列表中的元素
    r += 1

我最后的扫描结果如下(151,150的主机不存在):
在这里插入图片描述

以上部分就是今天的学习内容了,通过clamav和python第三方库paramiko结合的方式,实现了对远程主机的病毒扫描,clamav病毒库的更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值