1.基于paramiko对远程主机执行命令操作

秘钥形式


private_key = paramiko.RSAKey.from_private_key_file('c:/Users/用户名/.ssh/id_rsa') # 创建ssh对象
ssh = paramiko.SSHClient()
# 运行连接不在know_host文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='主机名', port='端口号', username='用户名', pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command("命令")
# 获取结果
result = stdout.read() # 关闭连接
ssh.close()

2.线程池提高效率

from concurrent.futures import ThreadPoolExecutor
# 创建一个十个线程的线程池
def task(i):
print("我是任务%s" % i)
pool = ThreadPoolExecutor(10)
for i in range(10):
pool.submit(task,i)

3.基于logging模块进行日志的提取

import logging
import traceback
# import settings class Logger(object):
def __init__(self, file_path, level):
file_handler = logging.FileHandler(file_path, 'a', encoding='utf-8')
fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s: %(message)s")
file_handler.setFormatter(fmt) self.logger = logging.Logger('cmdb', level=level)
self.logger.addHandler(file_handler) def error(self, msg):
self.logger.error(msg) logger = Logger("你的日志存放路径", logging.DEBUG) logger.error(traceback.format_exc()) # 获取异常堆栈信息

4.基于类的封装对数据进行封装

class BaseResponse(object):
def __init__(self, status=True, data=None, error=None):
self.status = status
self.data = data
self.error = error @property # 作用:让调用着不用加()
def dict(self):
return self.__dict__

5.基于工厂模式和反射对资产数据进行获取

def get_server_info(ssh, hostname):
server_info = {}
for key, path in settings.PLUGIN_CLASS_DICT.items():
module_path, class_name = path.rsplit('.', maxsplit=1)
try:
module = importlib.import_module(module_path)
except Exception as e:
print(e)
cls = getattr(module, class_name)
plugin_obj = cls()
info = plugin_obj.process(ssh, hostname)
server_info[key] = info
return server_info
# settings.py
# 获取计算机信息配置
PLUGIN_CLASS_DICT = {
'basic': 'lib.plugin.basic.BasicPlugin',
'disk': 'lib.plugin.disk.DiskPlugin',
'memory': 'lib.plugin.memory.MemoryPlugin',
'network': 'lib.plugin.network.NetworkPlugin',
}
# disk.py
import traceback
from lib.utils.log import logger
from lib.utils.response import BaseResponse class DiskPlugin(BasePlugin):
"""
获取磁盘信息
"""
def process(self, ssh, hostname):
result = BaseResponse()
try:
# output = ssh(hostname, 'MegaCli -PDList -aALL')
output = open('files/disk.out').read()
result.data = output
output.close()
except Exception as e:
logger.error(traceback.format_exc())
result.status = False
result.error = traceback.format_exc()
return result.dict

6.采集资产用到的命令

cpu:
cat /proc/cpuinfo
主板:
dmidecode -t1
内存:
dmidecode -q -t 17 2>/dev/null
网卡(salt源码):
ip link show
ip addr show
硬盘:
MegaCli -PDList -aALL

最新文章

  1. apache的AB测试
  2. HDU 2243 考研路茫茫——单词情结(AC自动机+DP+快速幂)
  3. Jenkins Slave 通过JNLP 的方式 访问Master IP 总是127.0.0.1
  4. bash广播
  5. android 手机信息获取
  6. poj 1401---求N!末尾0的个数,2的个数一定比5多,观察得来,0的产生即为2*5,去找这个阶乘一行里面5的个数即可
  7. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)
  8. intelliJ IDEA创建web工程
  9. 让你的JS代码更具可读性
  10. 原生js简单实现双向数据绑定原理
  11. 【物联网云端对接-4】通过MQTT协议与百度云进行云端通信
  12. 【设计模式+原型理解】第三章:javascript五种继承父类方式
  13. golang函数
  14. java0426 wen IO2
  15. 使用 fail2ban 防御 SSH 服务器的暴力破解攻击
  16. MySQL 5.7 修改root密码
  17. gitlab ssh clone问题解决
  18. (实用)win7/8修改远程桌面连接默认端口
  19. 六 Python基础 字符串和编码
  20. Google 地图 API for Android

热门文章

  1. Zabbix 监控 SNMP & JMX
  2. kubernetes实战-配置中心(三)配置服务使用apollo配置中心
  3. oslab oranges 一个操作系统的实现 实验五 让操作系统走进保护模式
  4. Leetcode(257)-二叉树的所有路径
  5. mysql 索引类型以及创建
  6. Java中的Lambda匿名函数后续
  7. CSS & Architecture
  8. Python Coding Interview
  9. TDD & Unit testing
  10. Flutter 在mixin中使用setState