您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

python 自动化运维脚本,可以巡检思科,华三,等网络设备

来源:网络整理 浏览:161次 时间:2020-04-03


python 自动化运脚本

按照oxidized搭建的CMDB 为数据源。自动向数据库读取账号密码,设备名称,等 并输出状态信息 如图所示


图片.png


数据库字段如下 enable 字段存放思科的enable密码,login 是登陆方式 存放http登陆,ssh 和telnet等登陆方式。device 是设备类型。

图片.png


第一段代码 批量抓取思科,华三的配置,命令部分我已经做了注释(具体模块使用可以百度)

可以根据此脚本更改命令列表,比如批量更改网络设备密码,批量备份配置到ftp,批量开启snmp,批量指定syslog服务器,批量设置ntp ,批量............

#!/usr/bin/python#-*- coding: utf-8 -*-import paramikoimport threadingimport timeimport osimport pymysqldef ssh2(ip,username,passwd,cmd,name):    try:        log = open ('/zhichang/xunjian/'+'%s-%s.txt'%(name,ip),'wb+') #日志保存地点        ssh = paramiko.SSHClient()        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())        ssh.connect(ip,22,username,passwd,timeout=5)        ssh_shell = ssh.invoke_shell()  #以执行多条命令        print ssh_shell.recv(1024)        for m in cmd:            commd = ssh_shell.sendall(m)  #列表循环执行            time.sleep(1)        log.write( ssh_shell.recv(999999))        ssh.close()    except :        print '%s\tError\n'%(ip)if __name__=='__main__':    h3c_sw = ["screen-length disable \n" , "display ip routing-table  \n ", "dis int \n" , "display cpu-usage \n", "display memory summary \n",    "display fan \n","display power \n","display  environment \n","display version \n"] #华三交换机巡检 \n 是模拟回车    h3c_wifi = ["screen-length disable \n" ,"display ip routing-table  \n ","dis int \n" ,"display cpu-usage \n","display memory summary \n",    "display wlan ap all  \n","display wlan client  \n","display version \n"]#华三wifi 巡检    cisco_2911 = ["enable \n","","terminal length 0 \n","show processes cpu \n","show processes memory \n","show ip route summ \n ","show version \n ","show int \n " ]# 思科设备巡检    thread=[]    print "Begin......"    db = pymysql.connect(        host="10.50.99.247",        user="数据库账号",        passwd="数据库密码",        port=3306,        db="network",        charset='utf8')    cursor = db.cursor()    cursor.execute("select ipadd,username,password,device,name from net_dev where model='comware' ") #华三设备信息抓取    h3c_sql = cursor.fetchall()    for i in h3c_sql:        if i[3] == "WX2500H" : #进行逻辑判断            a=threading.Thread(target=ssh2, args=(i[0], i[1], i[2], h3c_wifi, i[4]))   #多线程用列表位置锚定 参数传递            a.start()        else :            a = threading.Thread(target=ssh2, args=(i[0], i[1], i[2], h3c_sw, i[4]))            a.start()    cursor.execute("select ipadd,username,password,device,enable,name from net_dev where model='ios' and `group`='世贸职场'")#思科设备信息抓取    cisco_sql = cursor.fetchall()    for i in cisco_sql :        if  i[3] == "cisco2911":            cisco_2911[1] = str(i[4]+ '\n')   #由于思科enable 密码是从数据库读取,需要对列表进行修改,            b = threading.Thread(target=ssh2, args=(i[0], i[1], i[2], cisco_2911, i[5]))            b.start()            b.join()   #由于enabel变量的存在,多线程执行变量传递会有问题,用join进行锁定    db.close()

此python文件执行完成后 生成的log会保存到本地。


图片.png


用正则表达式 读取 参数进行输出 只输出了华三设备

#!/usr/bin/python#-*- coding: utf-8 -*-import reimport osimport sysimport pymysqldef xunjian(ip,name) :        try :                with open ('/zhichang/xunjian/%s-%s.txt'%(name,ip),'r') as file :  #批量打开文件                        message = file.read()                pattern = r'uptime.*minutes'           #正则表达式匹配                match = re.findall(pattern,message)                print (ip+':设备运行时间'+str(match))                routes = re.findall(r'Routes : \d+',message)                print (ip+':路由条数'+str(routes))                cpu = re.findall(r'\d+.*in last 5 minutes',message)                print(ip+':cpu使用率'+cpu[0])                memory = re.findall(r'FreeRatio\s+.*%\s',message)                memory1= re.findall(r'\d{2}.\d+%',memory[0])                print (ip+':内存使用率'+memory1[0])                power = re.findall(r'--\s+2\s+\w+',message)                power = re.findall(r'[a-zA-Z]+',power[0])                print (ip+':电源状态'+power[0])                fan = re.findall(r' State\s+:\s+[a-zA-Z]+',message)                fan = re.findall(r'[a-zA-Z]+$',fan[0])                print (ip+':风扇状态'+fan[0])                print ('-------------------------------------------------------\n-------------------------------------------------------\n-------------------------------------------------------\n-------------------------------------------------------')        except:                passif __name__=='__main__':    db = pymysql.connect(        host="10.50.99.247",        user="network",        passwd="xxxx",        port=3306,        db="network",        charset='utf8')    cursor = db.cursor()    cursor.execute("select ipadd,name from net_dev where model='comware' ")    data = cursor.fetchall()    for i in data:        xunjian(str(i[0]))    db.close()






推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com