java中的接口是类吗
1208
2022-09-08
Python批量备份网络设备配置(python备份交换机配置)
距离自己上次用shell写过网络配置备份好几年了,详细的shell脚本可以在本博客内搜索。由于之前的脚本一直可以部署在CentOS上,使用也正常,所以自己就懒得用python去重写。最近想想还是整合一下,毕竟python支持多种操作系统平台的使用。该脚本部署前需要在CentOS上提前配置好tftp(如果不配置的话也没事,直接自己指定tftp服务器IP和备份文件路径,脚本里面有说明),具体步骤可以参考我另一篇用shell备份配置的文章。下面直接上代码,目前python脚本都放在“/app/apps/Network-scripts”下,同时该目录下还有一个NETdevice.conf的文件存放账号密码信息,样式如下,name里面要有H3C或HW或CISCO的字样,否则无法识别。
name=OA_H3CaccessSW-07,IP=10.65.64.27,user=admin,passwd=e123444sdfg
name=Firewall_HW6325,IP=10.65.64.200,user=admin,passwd=341we34rtt
目前我只写了华为华三思科系列的配置保存命令,如果有需求,自己添加。
# /usr/bin/python# coding=utf-8import time, re, os, shutilimport paramikodef sshconn(ip, user, passwd, commands, LogFile) : myport = 22 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,myport,user,passwd) print('success login %s' % ip) cmdLine = ssh.invoke_shell() for line in commands : cmdLine.send("%s\n" % line) time.sleep(5) output = cmdLine.recv(65535) result = output.decode('ascii') print(result) with open(LogFile,'a',encoding='utf-8') as f: f.write(result) #记下备份的日志,方便后续能查询备份的结果 ssh.close()def main() : TFTP = '10.100.32.56' #TFTP的IP model = 'server_args' + '.*' Daily = time.strftime('%Y%m%d', time.localtime(time.time())) #当天时间 Workdir = '/app/apps/Network-scripts' #存放NETdevice.conf配置文件 DEV_INFO = os.path.join(Workdir, 'NETdevice.conf') ''' 以下这一段为CentOS上的tftp目录获取,如果是CentOS上没有安装xinite或者是windows平台下,可以直接指定tftpdir,\ 比如windwos下可以直接写tftpdir = r'D:\tftpfiles' ''' with open('/etc/xinetd.d/tftp', 'r', encoding='utf-8') as f : content = f.read() findkey = re.search(model, content) if findkey is not None : tftpdir = findkey.group().split()[3] #tftp根目录 '''以上为读取linux上tftp配置的路径''' Backdir = os.path.join(tftpdir, Daily) #网络设备配置会统一归档到该目录 if not os.path.isdir(Backdir) : #os.mkdir(Backdir) os.makedirs(Backdir) LogDIR = os.path.join(tftpdir, 'NETLOG') LogFile = os.path.join(LogDIR,'%s_network.log' % Daily) #每次备份的操作日志存放路径 if not os.path.isdir(LogDIR) : os.makedirs(LogDIR) with open(DEV_INFO, 'r', encoding='UTF-8') as f : for info in f.readlines() : line =info.strip() DEV_NAME = line.split(',')[0].split('=')[1] DEV_IP = line.split(',')[1].split('=')[1] DEV_USER = line.split(',')[2].split('=')[1] DEV_PASS = line.split(',')[3].split('=')[1] File = '%s.cfg' % DEV_NAME HWFile = '%s.zip' % DEV_NAME print(File, HWFile) if 'H3C' in DEV_NAME : #H3C系列设备的保存配置命令 cmdlist = ['tftp %s put startup.cfg %s' % (TFTP, File), 'quit'] elif 'HW' in DEV_NAME : #华为系列设备的保存配置命令 cmdlist = ['tftp %s put vrpcfg.zip %s' % (TFTP, HWFile), 'quit'] elif 'ARUBA' in DEV_NAME :#Aruba系列设备的保存配置命令,第二个enable是enable的密码,我偷懒没放到NETdevice.conf中 cmdlist = ['enable', 'enable', 'copy startup-config tftp: %s %s' % (TFTP, File), 'exit'] else : #默认就用CISCO系列设备的保存配置命令 cmdlist = ['copy startup-config tftp:', TFTP, File, 'exit'] try: sshconn(DEV_IP, DEV_USER, DEV_PASS, cmdlist, LogFile) except BaseException as e: print(e) for line in os.listdir(tftpdir): if 'cfg' in line or 'zip' in line: srcdir = os.path.join(tftpdir,line) shutil.move(srcdir, Backdir) #配置文件归档到指定的日期目录中if __name__ == '__main__' : main()
然后crontab -e
0 1 * * 6 python /app/apps/Network-scripts/CFG_NET_back.py
最后保存
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~