• CMDB的四种模式


    为什么要有CMDB?

    CMDB --Configuration Management Database 配置管理数据库.

    1.为了实现资产的自动采集,资产的自动更新,

    为了搭建公司自动化平台的基础则需要资产的管理.

    2.优点减少了人工干预,降低人员成本.

    CMDB三种工作方式

    1.Agent

    Agent工作流程:

    1.首先在每台服务器都装上agent. agent定时执行指令

    2.agent将处理过的数据通过requests发给API

    3.再由API更新到数据库中.

    Ageng优点:

    速度快;

    缺点:

    每一台服务器都需要Agent

    2.ssh类

     ssh类的工作方式:

    1.资产采集器(中控机)先向API获取未采集的服务器列表

    2.中控机通过paramiko模块里的ssh远程连接到服务器.(主机名,密码,命令)获取服务器的数据

    3.获取完所有未采集的服务器后,将数据发送给API.

    优点:无agent

    缺点:速度慢

    适合用在服务器少的情况下.

    3.salt-stack

     salt-stack流程:

    1.安装了saltstack-master的中控机先去API获取未采集的主机名列表.

    2.通过RPC的模式来获取数据.

    (RPC模式:

    将主机名,密码,命令放在a消息队列里

    装有salstack-slave的服务器会去a消息队列里拿命令,检查是否是自己需要执行的.

    服务器执行完命令后将数据放在b消息队列里,中控机去b消息队列里获取数据

    zeromq软件)

    3.将获取的数据发送给API,API存数数据库.

     优点:速度快,开发成本低

    缺点:依赖saltstack

    4.puppet

    1.要用ruby写.

    2.有点自动汇报数据

    缺点:必须用ruby

    为什么要有API

    1.提供接口.系统调用数据的时候,提供接口.不让外界直接接触数据库

    2.对提交的数据进行统一化的管理.

    3.比较安全.如果没有API如果服务器给黑了,可能会把数据库删表.

    连接API的安全认证

    1.API和服务器端各有一个相同的key

    2.当服务器端想连接API的时候,将key进行md5加密,发给API

    APi的key也进行MD5加密,两个密文对比.,相同则代表通过.

      ?存在问题. 如果这个key给别人截取了,那么其他的人就可以向API发无用的数据.

    3.那么就让key动态起来,我利用了本地的时间和key组合成一个字符串,用md5加密同时也要将本地的时间发给API

    因为API接收到的时间会延迟. 然后APIkey和服务端的时间,md5加密 然后两个密文对比.

    ?存在问题,发现有更多的key可以进入到API

    4.将第一次发送的密文放在一个列表里.第二次判断是否在该列表里,在则登录失败.

    ?那么需要存放的密文很多

    5.失效.让服务器发的这个key10秒钟后时间,每次密文判断之前,先判断是否超时了.

    清空失效的密文

    def api_auth_method(request):
        auth_key = request.META.get('HTTP_AUTH_KEY')
        if not auth_key:
            return False
        sp = auth_key.split('|')
        if len(sp) != 2:
            return False
        encrypt, timestamp = sp
        timestamp = float(timestamp)
        limit_timestamp = time.time() - ASSET_AUTH_TIME
        print(limit_timestamp, timestamp)
        if limit_timestamp > timestamp:
            return False
        ha = hashlib.md5(ASSET_AUTH_KEY.encode('utf-8'))
        ha.update(bytes("%s|%f" % (ASSET_AUTH_KEY, timestamp), encoding='utf-8'))
        result = ha.hexdigest()
        print(result, encrypt)
        if encrypt != result:
            return False
    
        exist = False
        del_keys = []
        for k, v in enumerate(ENCRYPT_LIST):
            print(k, v)
            m = v['time']
            n = v['encrypt']
            if m < limit_timestamp:
                del_keys.append(k)
                continue
            if n == encrypt:
                exist = True
        for k in del_keys:
            del ENCRYPT_LIST[k]
    
        if exist:
            return False
        ENCRYPT_LIST.append({'encrypt': encrypt, 'time': timestamp})
        return True
    View Code
  • 相关阅读:
    ios开发之--UITextField光标右移
    ios开发之--复制到剪切板
    Splash scroll_position 属性
    Splash plugins_enabled 属性
    Splash images_enabled 属性
    Splash resource_timeout 属性
    Splash js_enabled 属性
    Splash args 属性
    Splash 对象属性
    Splash Lua 脚本
  • 原文地址:https://www.cnblogs.com/chenxuming/p/9265824.html
Copyright © 2020-2023  润新知