距离自己上次用shell写过网络配置备份好几年了,详细的shell脚本可以在本博客内搜索。由于之前的脚本一直可以部署在CentOS上,使用也正常,所以自己就懒得用python去重写。最近想想还是整合一下,毕竟python支持多种操作系统平台的使用。下面直接上代码,目前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, shutil
import paramiko
def sshconn(ip, user, passwd, commands, LogDIR) :
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(LogDIR,'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'
DEV_INFO = os.path.join(Workdir, 'NETdevice.conf')
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根目录
Backdir = os.path.join(tftpdir, Daily) #网络设备配置会统一归档到该目录
if not os.path.isdir(Backdir) :
#os.mkdir(Backdir)
os.makedirs(Backdir)
LogDIR = os.path.join(os.path.join(tftpdir, 'NETLOG'),'%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
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, LogDIR)
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()