python批量拷贝数据脚本_使用python来玩转ensp~3-写个批量备份配置文件脚本

目录回顾:

根据前面所学习的知识,可以远程登录设备下发命令等,现在已经可以转化为生产力了哈,今天小Q要实现的就是一个批量备份配置的小东西,

小Q通过学习产品文档了解到,可以通过以下四种方法进行备份配置文件:

a)直接屏幕拷贝。

b)备份配置文件到存储器中。

c)通过TFTP备份配置文件。

d)通过FTP备份配置文件。

小Q对这几种备份方式做了一个小对比,

a)直接屏幕拷贝 -屏幕上显示的配置信息受终端软件的影响,可能会出现某配置过长而换行的情况,而换行的配置可能无法恢复。 -丢弃此方式

b)备份配置文件到存储器中 ?受ENSP环境所限制,可以实现么? 不了解,丢弃此方式

c)通过TFTP备份配置文件 ?对设备无修改无变动 ?完美啊

d)通过FTP备份配置文件 ?备份时需要启动FTP服务器功能,对设备配置有变动,涉及安全性-丢弃此方式

既然采用TFTP的方式备份配置文件,

采用如下的思路进行配置:

a)保存配置文件。-执行命令 save config.cfg

b)通过TFTP备份配置文件。-需要一个tftp server,然后在设备上执行上传命令

组网图如下

要完成的备份脚本程序的组成模块如下:

首先实现备份程序的功能,直接修改第2章的内容,将多个设备信息已固定格式保存在一个txt里面,如下:

IP:用户名:密码

修改上次的ssh登录,使其支持多设备,代码如下(代码中依然增加了注释):

#!/usr/bin/python

#coding=utf-8

# 批量备份配置文件小脚本

from Exscript.util.interact import read_login

from Exscript.protocols import SSH2

from Exscript import Account

import os

import time

import datetime

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

def LoginSSH(_Host,_Username,_Password) :

print "[+] Loging Host : %s " % _Host

account = Account(_Username,_Password)

ssh = SSH2()

try :

print "[+] Trying to Login in with username: %s password: %s " % (_Username,_Password)

ssh.connect(_Host)

ssh.login(account)

except Exception,e:

print "[-] Failed! ...",e

return 'LoginError',ssh

print "[+] Success ... username: %s and passoword %s is VALID! " % (_Username, _Password)

return 'LoginSuccess',ssh

def StartExecuteBackup(sshConnection,SaveCfgFileName):

BackUpCommand = 'save %s' % SaveCfgFileName

sshConnection.execute('dir')

# 判断是否已经存在备份文件,发现=1,未发现=0

CfgFileStatus = 0

if SaveCfgFileName in sshConnection.response:

CfgFileStatus = 1

sshConnection.set_prompt(r'y/n')

sshConnection.execute(BackUpCommand)

# 备份文件不存在时,确认一次

if CfgFileStatus == 0:

sshConnection.set_prompt()

sshConnection.execute('y')

print '[*] Save the configuration to %s' % SaveCfgFileName

# 备份文件存在时,确认两次,进行覆盖

else:

sshConnection.execute('y')

sshConnection.set_prompt()

sshConnection.execute('y')

print '[*] Overwrite %s '% SaveCfgFileName

def StartExecuteTftpUpload(sshConnection,TFtpHost,SaveCfgFileName):

# tftp IP put config.cfg backup.cfg

print '[*] Uploading the file to the remote TFTP server. Please wait...'

TFtpUpFileCommand = "tftp %s put %s %s" % (TFtpHost,SaveCfgFileName,SaveCfgFileName)

sshConnection.execute(TFtpUpFileCommand)

print '[*] TFTP: Uploading the file successfully.'

if __name__ == '__main__':

TFtpHost = raw_input("[*] Please Input Tftp server Adress:>")

# 读取多设备列表文件

HostFile = 'HostList.txt'

Date = datetime.date.today().strftime("%Y-%m-%d")

for line in open(HostFile, "r").readlines():

HostinfoList = line.strip().split(':')

_Host = HostinfoList[0]

_Username = HostinfoList[1]

_Password = HostinfoList[2]

LoginResult,sshConnection = LoginSSH(_Host,_Username,_Password)

# 登录成功后即可执行命令,基本检查信息

if LoginResult == 'LoginSuccess':

# 设置生成的配置文件名

SaveCfgFileName = '%s_%s_config.cfg' % (_Host,Date)

# 生成配置文件

StartExecuteBackup(sshConnection,SaveCfgFileName)

# 备份配置文件到tftp服务器

StartExecuteTftpUpload(sshConnection,TFtpHost,SaveCfgFileName)

# 关闭连接

#sshConnection.close()

print '[*] Session Close.'

然后,我们在编写一个tftp server小脚本(其他类似tftp软件一样可以的),用来接收从设备上传的配置文件,并保存,代码非常简单如下:

#!/usr/bin/python

#coding=utf-8

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

import tftpy

import ConfigParser

config = ConfigParser.RawConfigParser()

# 如果要设置保存的目录,修改tftpcfg.cfg即可

config.read('tftpcfg.cfg')

directory = config.get('config','directory')

server = tftpy.TftpServer(directory)

print '[*] Tftp: 0.0.0.0'

print '[*] Upfile in:',directory

server.listen('0.0.0.0', 69)

使用时要设置tftp server工作目录,修改tftpcfg.cfg即可,如下:

好的现在一些都准备完毕了,首先启动我们的tftp

server软件,

然后运行我们的批量备份配置程序,运行后先输入Tftp服务器的ip,脚本将会自动进行配置备份,效果如下:

此时在查看tftp的目录,已经获取到了配置文件,如下:

目前这个小脚本异常处理还未考虑,所以仅限测试使用哦,相信简单修改下就可以使用了哈。

提示:可以将脚本生成exe的格式,就可以运行在无python环境的电脑了,附件将会进行打包提供下载,方便各位根据实际环境修改。

你可能感兴趣的:(python批量拷贝数据脚本)