华为交换机配置导出备份python脚本

一、脚本编写思路

(一)针对设备型号

主要针对华为(Huawei)和华三(H3C)交换机设备的配置备份

(二)导出前预处理

1.在配置导出前,自动打开crt软件或者MobaXterm软件,并自动登录交换机,进行配置导出。
4.自动检测被导出交换机是否搭建ftp配置,如果没有配置ftp服务,自动完善ftp配置,并自动完善交换机设备和电脑ftp配置文件的传输设备。
2.需要密码登录的交换机,在桌面自动读取一个表格文档,名称为:【交换机设备信息表】的表格文件。
3.根据读取到的文档,新建ssh会话,输入文本的IP,管理员账号和密码,并自动登录设备。

(三)配置文件导出格式


1.将所有配置导出文件保存到桌面并新建一个文件夹名称为:时间戳+交换机,
2.每个导出交换机配置名称保存为:设备命名+设备型号+时间戳。    
3.导出的同一设备配置文件格式必须同时包含TXT文本和cfg

二、函数依赖库

为了运行Python脚本,需要确保已经安装了几个特定的Python库。这些库包括用于处理网络连接、文件操作和数据处理的工具。以下是必须安装的库列表及其用途:

  1. paramiko: 用于处理SSH连接和会话,这对于与交换机进行通信非常重要。
  2. pandas: 用于读取和处理Excel文件中的数据,这是从桌面读取设备信息的关键部分。
  3. openpyxl: 这不是脚本中直接提到的,但它是pandas用于处理Excel文件的依赖库,特别是.xlsx文件。
  4. socket: 这是标准库中的一部分,用于获取本机IP地址,通常不需要单独安装。
(一)安装步骤

你可以通过Python的包管理器pip来安装所需的库。在你的命令行工具中运行以下命令来安装这些库:

pip install paramiko pandas openpyxl 

这条命令会安装paramikopandas,同时确保openpyxl也被安装,使得pandas可以处理Excel文件。

(二)确保环境配置正确

在运行脚本之前,还应确保你的Python环境配置正确,特别是Python版本。这个脚本应该在Python 3.x环境中运行无误。你可以通过运行python --versionpython3 --version(取决于你的系统配置)来检查你的Python版本。

(三)安装示例

(四)确保环境配置正确

在运行脚本之前,还应确保你的Python环境配置正确,特别是Python版本。这个脚本应该在Python 3.x环境中运行无误。你可以通过运行python --versionpython3 --version(取决于你的系统配置)来检查你的Python版本。

如果你是在一个新的环境或虚拟环境中工作,确保所有库都按需安装。这样可以避免影响系统中其他Python项目的依赖。

三、Python脚本

import paramiko  # 导入paramiko库用于SSH连接
import pandas as pd  # 导入pandas库处理Excel文件
import os  # 导入os库进行文件系统操作
from datetime import datetime  # 导入datetime库获取时间戳
import time  # 导入time库用于暂停操作
import socket  # 导入socket库用于获取本机IP地址

# 读取设备信息表
def read_device_info():
    file_path = os.path.join(os.path.expanduser('~'), 'Desktop', '交换机设备信息表.xlsx')  # 构造文件路径
    return pd.read_excel(file_path)  # 使用pandas读取Excel文件并返回

# 获取本机IP地址
def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 创建UDP socket
    try:
        s.connect(('10.255.255.255', 1))  # 尝试连接到一个不存在的地址以获取本机IP
        IP = s.getsockname()[0]  # 获取成功后的本机IP地址
    except Exception:
        IP = '127.0.0.1'  # 如果获取失败,使用本地回环地址
    finally:
        s.close()  # 关闭socket
    return IP

# 创建文件夹用于存放配置
def create_folder():
    timestamp = datetime.now().strftime("%Y%m%d%H%M%S")  # 获取当前时间戳
    folder_name = f"{timestamp}_交换机"  # 定义文件夹名
    folder_path = os.path.join(os.path.expanduser('~'), 'Desktop', folder_name)  # 定义完整路径
    os.makedirs(folder_path, exist_ok=True)  # 创建文件夹,如果存在则忽略
    return folder_path

# 设置FTP服务
def setup_ftp(ssh, local_ip):
    commands = [
        'display ftp-server configuration\n',  # 查看FTP服务器配置
        'ftp server enable\n',  # 启用FTP服务的命令
        f'ftp server acl permit source ip {local_ip}\n'  # 设置FTP服务的访问控制,允许本机IP访问
    ]
    ssh.send(commands[0])  # 发送第一个命令
    time.sleep(2)  # 等待命令执行
    output = ssh.recv(65535).decode('utf-8')  # 读取输出
    if 'FTP server is not configured' in output:  # 如果FTP服务未配置
        for command in commands[1:]:  # 遍历并执行剩余命令
            ssh.send(command)
            time.sleep(1)

# 导出配置文件
def export_config(ip, username, password, device_info, folder_path):
    client = paramiko.SSHClient()  # 创建SSH客户端
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 自动接受新的SSH密钥
    client.connect(ip, username=username, password=password)  # 连接到设备
    
    local_ip = get_local_ip()  # 获取本机IP地址
    with client.invoke_shell() as ssh:  # 开启一个新的SSH会话
        setup_ftp(ssh, local_ip)  # 调用函数检查并配置FTP
        
        commands = ['display current-configuration\n', 'save\n']  # 定义配置备份命令
        for command in commands:  # 循环发送命令
            ssh.send(command)
            time.sleep(5)  # 等待命令执行

        output = ssh.recv(65535).decode('utf-8')  # 读取配置输出
        
        timestamp = datetime.now().strftime("%Y%m%d%H%M%S")  # 重新获取时间戳
        filename_base = f"{device_info['设备命名']}_{device_info['设备型号']}_{timestamp}"  # 构造文件名
        with open(os.path.join(folder_path, f"{filename_base}.txt"), 'w') as file_txt:  # 保存为txt文件
            file_txt.write(output)
        with open(os.path.join(folder_path, f"{filename_base}.cfg"), 'w') as file_cfg:  # 保存为cfg文件
            file_cfg.write(output)
            
    client.close()  # 关闭SSH客户端

# 主函数
def main():
    folder_path = create_folder()  # 创建文件夹
    device_info = read_device_info()  # 读取设备信息

    for index, row in device_info.iterrows():  # 遍历设备信息
        export_config(row['IP'], row['管理员账号'], row['密码'], row, folder_path)  # 导出配置

if __name__ == "__main__":
    main()  # 运行主函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/618739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ int 学习

在C语言中 & 是取地址符号; 在C中有 int& 这样的,这里的&不是取地址符号,而是引用符号; 引用是C对C的一个补充; 变量的引用就是变量的别名,讲的通俗一点就是另外一个名字; a的值…

transformer与beter

transformer与beter 解码和编码器含义tokizer标记器和one-hot独热编码编码解码--语义较好的维度空间矩阵相乘--空间变换编码理解如何构造降维的嵌入矩阵--实现到达潜空间上面是基础,下面是transformer正文自注意力机制注意力分数--上下文修正系数为什么需要KQ两个矩…

GO+树莓派+E53_IA1智慧农业模块

简介 之前手头上有小熊派的开发板, 有一个E53_IA1模块, 刚好用到树莓派上, 使用GO进行控制,实现智慧农业模块功能。 模块介绍 模块电路介绍 按硬件分成五块, 其中四块在本次用上了, 分别是 1. 补光模块&…

SpringBoot结合Canal 实现数据同步

1、Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具,用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…

数据分析需要注意哪些法律法规

数据分析 前言一、数据处理过程二、数据收集阶段的法律规则数据收集应具备合法、正当、透明原则数据收集应坚持最小必要原则数据收集应遵守知情-同意规则数据收集应遵守目的明确性要求 三、数据储存的法律规则四、数据使用与处理的阶段的法律规则数据安全保护义务按照数据分级分…

全球首例!猪肾移植患者死亡,人类科技与伦理或将面临挑战?

全球首例猪肾移植患者的离世,如同一颗重磅炸弹,在医学界激起千层浪花,让原本充满希望的“死而复生”异种器官移植技术再次被推至风口浪尖。 今年3月,一场与命运的较量在麻省总医院悄然落幕。全球首位接受转基因猪肾移植的患者理查…

Boss让你设计架构图,你懵逼了,解救你的参考图来啦。

架构图是指用于描述系统或软件的结构和组成部分之间关系的图形表示。 它是一种高层次的图示,用于展示系统的组件、模块、接口和数据流等,以及它们之间的相互作用和依赖关系。架构图通常被用于可视化系统的整体设计和组织结构,帮助人们理解系…

数据结构(四)——二叉树和堆(下)

制作不易,三连支持一下呗!!! 文章目录 前言一、二叉树链式结构的实现总结 前言 这篇博客我们将来了解普通二叉树的实现和应用,对大家之前分治和递归的理解有所挑战。 一、二叉树链式结构的实现 1.前置说明 在学习二叉…

对Windows超融合S2D的一些补充

先说一个不知道算不算BUG的例子,下面这个存储池是用两台服务器各2块10G建立的,除去系统保留的部分,显示还有13G可用。 但如果使用其新建虚拟磁盘会显示可用的空间为0 然后我又各增加了一块10G硬盘进池,变成了可用空间为30.5GB …

“二代”接班进行时:达利食品许阳阳揭秘“零食大王”成长密钥

“二代接班”早已不是一个新鲜话题。近年来,随着时间的推移,那些伴随改革开放和中国制造崛起的民营企业,更多的正在经历或已完成“二代接班”。 “毛巾王子”家的洁丽雅,最近因大手笔签约多位代言人而引起讨论的九牧王&#xff0…

基于Unity为Vision Pro 构建游戏的4个关键

为Vision Pro开发游戏时需要考虑的四个关键概念:输入的自然性、物理尺寸的真实匹配、交互空间的充足性以及Unity组件的有效利用。 AVP交互小游戏(Capsule Critters)作者分享了使用Unity构建的几个核心关键: Bounded - 游戏定义:Bounded(有限)是Unity的术语,指的是游戏作…

[AIGC] 几道 redis数据结构相关面试题

文章目录 7. 数据类型的实现8. 什么是空间预分配以及惰性空间释放,SDS 是怎么实现的9. 为什么说 SDS 是二进制安全的呢10. 说说 redis 里的对象11. 使用 RedisObject 的好处12. RedisObject 的具体结构是什么 7. 数据类型的实现 8. 什么是空间预分配以及惰性空间释放…

Tomcat添加服务以及设置开机自启

下载地址连接 Index of /dist/tomcat👓 注意点:不要出现中文路径 #环境变量 CATALINA_HOMED:\apache-tomcat-7.0.62 TOMCAT_HOMED:\apache-tomcat-7.0.62 JAVA_HOMED:\tool\jdk1.8.0_111 PATH%CATALINA_HOME%\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\…

【JVM基础篇】类加载器分类介绍

文章目录 类加载器什么是类加载器类加载器的作用是什么应用场景类加载器的分类启动类加载器用户扩展基础jar包 扩展类加载器和应用程序类加载器扩展类加载器通过扩展类加载器去加载用户jar包: 应用程序加载器 Arthas中类加载器相关功能 文章说明 类加载器 什么是类…

车载测试:为什么你投十份简历,只有一两家公司约你?

最根本的原因,就是一方在汲汲渴求,而恰恰另一方呈现出的关键点让其怦然心动。求者心中有所想,而应者恰恰展现了求者所想的那一面。这就是个中奥妙。 程序员在找工作时,在一开始有三件事情会对能否获得面试机会至关重要&#xff1…

C++笔记(STL标准库)

1.STL六大部件 容器 Containers分配器 Allocators:帮容器分配内存算法 Algorithms迭代器 Iterators:算法通过迭代器操作容器里的数据,是一种泛化的指针适配器 Adapters:修改或扩展已有类或函数的接口以满足特定的需求仿函数 Func…

自动秒收录网址导航分类目录模板

自动秒收录网址导航是一个以html5css3进行开发的免费版网址自动收录模板源码。 模板特点:全站响应式H5网站制作技术,一个网站适应不同终端,模板支持网址导航一键采集入库,免规则文章资讯智能批量采集内置伪原创,本地化…

DSA理解理解蓝桥杯例题signature

一、历史 1991年8月,NIST(Nation Institute of Standards and Technology,美国国家标准技术研究所)提出了数字签名算法(DSA)用于他们的数字签名标准(DSS)中。 DSA是算法&#xff0c…

SCI论文发表:寻找论文选题的7种方法 (建议收藏)!

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 近期有好几个同学问娜姐关于论文选题的问题:什么样的选题是好的选题-有价值好发表。这篇来分享7种寻找有效选题的方法。 在我们寻找论文选题的过程中,…

Linux配置两个局域网间的网络转发

网络拓扑如上图所示,有192.168.1.0(255.255.255.0),192.168.2.0(255.255.255.0)两个局域网。若要使host1可直接通过ip地址访问host3,则需在host2中配置路由转发。 host2 配置静态路由(系统一般会自动配置) # 添加静…