利用python实现网络设备配置批量上传和批量下载功能
- 利用ensp实现网络设备和物理主机互通
- 配置网络设备配置批量上传功能
- 配置批量下载功能
- 常见问题
提示: 本文章代码所使用目录均使用相对目录,只需将配置存放目录和文件下载目录(已用符号标出),更改为自己想存放和下载的目录即可*
利用ensp实现网络设备和物理主机互通
ensp配置
通过本文第一部分配置ensp,实现ensp网络设备和物理机互通,从而进行下一步实验
配置网络设备配置批量上传功能
import time
import os
from datetime import datetimeROOT_PATH = os.path.dirname(os.path.abspath(__file__)) #当前目录的上一级目录
DB_PATH = os.path.join(ROOT_PATH,"*") #拼接路径,*更改为自己存放配置文件的路径,最好和项目在同一个文件中
def ssh_connect(ip):ssh = paramiko.SSHClient() #创建SSH登录实例,相当于定义了一个客户端ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #自动保存公钥ssh.connect(hostname=ip,port=22,username="admin",password="admin123") #网络设备账号密码,需要更改cli = ssh.invoke_shell() #将结果回显time.sleep(0.5)file_path = os.path.join(DB_PATH,"*.txt") #所需上传的配置文件名称f = open(f"{file_path}", mode="r", encoding="utf-8") #打开与本程序在同一个文件夹下的文件并放入内存中for i in f.readlines():cli.send(i)time.sleep(0.5)f.close()res = cli.recv(9999).decode('utf-8') #字符转换为utf-8格式print(res)ssh.close()
data_list = [{"ip": f"192.168.56.{i}","sysname":f"SW{i}"} for i in range(2,3)]
for i in data_list:ssh_connect(i["ip"])
配置批量下载功能
可以用于定期下载配置文件,减少手动下载的麻烦
import paramiko
import time
import os
from datetime import datetimeROOT_PATH = os.path.dirname(os.path.abspath(__file__))
def down(ip,sysname):tran = paramiko.Transport((ip,22))tran.connect(username="admin",password="admin123")sftp = paramiko.SFTPClient.from_transport(tran)path = os.path.join(ROOT_PATH,"*") #定义一个本地目录,*更改为想创建的文件目录if not os.path.exists(path): #如果不存在path定义的目录则创建os.makedirs(path)time_now = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") #用strftime转为为字符串,之间只能用-,否则报错file_name = os.path.join(path, fr"{sysname}-{time_now}.zip")print(file_name)local_path = file_nameremote_path = "/vrpcfg.zip"sftp.get(remote_path,local_path)
data_list = [{"ip": f"192.168.56.{i}","sysname":f"SW{i}"} for i in range(2,4)]
for i in data_list:down(i["ip"],i["sysname"])
常见问题
如果出错请查看是否语法格式错误,目录是否存在空格
如果无对应包文件,会导致功能无法使用,请提前下载,在python软件终端界面,输入pip3 install +对应包名即可(例子如下)