利用python实现网络设备配置批量上传和批量下载功能
- 利用ensp实现网络设备和物理主机互通
- 配置网络设备配置批量上传功能
- 配置批量下载功能
- 常见问题
提示: 本文章代码所使用目录均使用相对目录,只需将配置存放目录和文件下载目录(已用符号标出),更改为自己想存放和下载的目录即可*
利用ensp实现网络设备和物理主机互通
ensp配置
通过本文第一部分配置ensp,实现ensp网络设备和物理机互通,从而进行下一步实验
配置网络设备配置批量上传功能
import time
import os
from datetime import datetime
ROOT_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 datetime
ROOT_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_name
remote_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 +对应包名即可(例子如下)