自动化运维-Python paramiko 实现无客户端系统巡检

功能:批量系统命令巡检

对象:操作系统 HP-UN  Linux

方法:Python paramiko

实现关键脚本:

第一 登录系统信息:

#创建用户登陆信息,并且生产一个JSON 文件
    def write_os_info():
        path = os.path.dirname(__file__) + '/os_logon.json'
        os_info = {'主机名':{'ip':'具体IP', 'pro':'登录系统的协议', 'port':'通过上面协议的端口号', 'user':'登录系统的用户', 'passwd':'登录系统的密码'}}
        with open(path, "w+", encoding="utf-8") as wf:
            # dumps 将数据转换成字符串
            json.dump(os_info, wf)
        print("写入文件完成...")

说明:我采用了明文进行,信息目录,也可以通过下面方面,通过密钥实现,感兴趣的可以尝试一下,有点事可以保护系统的用户名和密码;

#private_key = paramiko.RSAKey.from_private_key_file('id_rsa')

第二  读取用户登录信息,通过上一步生产的JSON 文件,进行逐个系统信息读取

# 读取用户登陆信息
    def get_os_result():
        global g_tmp_ip
        global g_tmp_port
        global g_tmp_pro
        global g_tmp_user
        global g_tmp_passwd
        path = os.path.dirname(__file__) + '/os_logon.json'
        with open(path, "r+", encoding="utf-8") as rf:
            os_info = json.load(rf)
            #print(os_info)
        print("读取文件完成...")
        #print(os_info.items())
        for keyValue in (os_info.keys()):
            #print(os_info[keyValue])
            nextValue     =  os_info[keyValue]
            g_tmp_ip      = nextValue['ip'].strip()
            g_tmp_port    = int(nextValue['port'].strip())
            g_tmp_pro     = nextValue['pro'].strip()
            g_tmp_user    = nextValue['user'].strip()
            g_tmp_passwd  = nextValue['passwd'].strip()
            print("########HOSTNAME:",keyValue,",IP:",g_tmp_ip,",PROTOCOL:",g_tmp_pro,",LOGON USER:",g_tmp_user,"########")
            #通过获取JSON 文件中用户登陆系统
            get_os_info.get_os_dir(g_tmp_ip,g_tmp_pro, g_tmp_port, g_tmp_user, g_tmp_passwd)
            time.sleep(3) #sleep 3 s 为了巡检的内容慢慢的输出

第三 获取系统的目录使用情况,首先通过系统类型分类,然后再进行不同系统的目录巡检:

#通过IP 协议 端口号  用户名 密码 登陆系统
    def get_os_dir(ip,pro,port,user,passwd):
        if pro == 'SSH':
            # 创建SSH对象
            ssh = paramiko.SSHClient()
            # 允许连接不在know_hosts文件中的主机
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            # 连接服务器
            ssh.connect(ip, port, user, passwd)
            #ssh.connect(hostname='', port=22, username='oracle', password='')
            stdin, stdout, stderr = ssh.exec_command('/bin/uname')
            result = stdout.read()
            platformV = result.decode().strip()
            plat_name = 'Linux'
            #print(platformV)
            if platformV == plat_name:
                # 执行命令
                stdin, stdout1, stderr = ssh.exec_command('df -h')
                result1 = stdout1.read()
                print(result1.decode())
                # 获取命令结果
            elif platformV == "HP-UX":
                # 执行命令
                stdin, stdout2, stderr = ssh.exec_command('bdf')
                result2 = stdout2.read()
                print(result2.decode())
                # 获取命令结果
            else:
                print('对不起,该系统我们当前不支持')
            # 关闭连接
            ssh.close()
        elif pro == 'TELNET':
            print('hh')
        else:
            print('error')




第四 效果:

请使用浏览器的分享功能分享到微信等