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

news2024/11/28 16:40:13

一、脚本编写思路

(一)针对设备型号

主要针对华为(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()  # 运行主函数

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IEEE 802.11标准

在IEEE 802.11标准中使用了扩频通信技术,主要作用是使得抗干扰性更强。 IEEE 802.11在MAC层采用了CSMA/CA协议。 IEEE 802.1x是一种基于端口认证协议。

【数据分析面试】41.如何分析处理Netflix流失用户?(业务分析)

题目 假设有一百万 Netflix 用户在过去六个月内没有登录到 Netflix。 你会如何确定原因?以及你会如何处理这些用户? Netflix 是一家总部位于美国的全球性流媒体娱乐服务公司,提供在线视频点播服务。通过其网站和移动应用,用户可…

内容检索(2024.05.12)

随着创作数量的增加,博客文章所涉及的内容越来越庞杂,为了更为方便地阅读,后续更新发布的文章将陆续在此汇总并附上原文链接,感兴趣的小伙伴们可持续关注文章发布动态! 本期更新内容: 1. 信号仿真类话题-…

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起,目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开,可以将任何容器与任何算法结合使用,只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …

Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧

Android性能&#xff1a;高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧 如果在Androidmanifest.xml配置&#xff1a; <application android:hardwareAccelerated"false" > 或者某个特点View使用代码&#xff1a; myView.setLayerType(View.LAYER_TYPE_SOFT…

【Python-爬虫】

Python-爬虫 ■ 爬虫分类■ 1. 通用网络爬虫&#xff1a;&#xff08;搜索引擎使用&#xff0c;遵守robots协议&#xff09;■ robots协议&#xff08;君子协议&#xff09; ■ 2. 聚集网络爬虫&#xff1a;自己写的爬虫程序 ■ urllib.request&#xff08;要导入的模块&#x…

字典是如何实现的?Rehash 了解吗?

字典是 Redis 服务器中出现最为频繁的复合型数据结构。除了 hash 结构的数据会用到字典外&#xff0c;整个 Redis 数据库的所有 key 和 value 也组成了一个 全局字典&#xff0c;还有带过期时间的 key 也是一个字典。(存储在 RedisDb 数据结构中) 字典结构是什么样的呢&#xf…

PDF Squeezer for Mac,让PDF压缩更高效

还在为PDF文件过大而烦恼吗&#xff1f;试试PDF Squeezer for Mac吧&#xff01;它拥有强大的压缩功能&#xff0c;可以快速将PDF文件压缩至更小的体积&#xff0c;让你的文件传输更快捷。同时&#xff0c;它还支持多种压缩方式&#xff0c;满足你的不同需求。赶快下载体验吧&a…

【机器学习300问】88、什么是Batch Norm算法?

一、什么是Batch Norm&#xff1f; &#xff08;1&#xff09;Batch Norm的本质 神经网络中的Batch Normalization&#xff08;批量归一化&#xff0c;简称BatchNorm或BN&#xff09;是一种改进神经网络训练过程的规范化方法&#xff0c;BatchNorm的主要目的是加速神经网络的训…

每日两题 / 23. 合并 K 个升序链表 94. 二叉树的中序遍历(LeetCode热题100)

23. 合并 K 个升序链表 - 力扣&#xff08;LeetCode&#xff09; 若lists有k个元素&#xff0c;调用k - 1次&#xff08;两个有序链表的合并&#xff09;即可 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNod…

【Delphi】OpenCV 实战(一):OpenCV简介及开发环境配置

目录 一、OpenCV 功能模块 二、Delphi 中使用OpenCV 三、OpenCV 4.7 Delphi开发环境配置 1. 环境配置 2. OpenCV 中Demo程序的编译配置 3. 运行 Demo (OpenCV for Delphi) OpenCV 是世界上最大的计算机视觉库。 它是开源的,包含 2500 多种算法,由非营利…

八、VUE内置指令

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 四、VUE事件处理 五、VUE计算属性 六、Vue监视属性 七、VUE过滤器 七、VUE内置指令 九、VUE组件 v-text 向其所在的节点中渲染文本内容。 (纯文本渲染)与插值语法的区别&#xff1a;v-text会替换掉节点中的内容&#xff0c;{{x…

技术爱好者必看:如何用AI问答API彻底改变用户体验!

AI 问答 API 对接说明 我们知道&#xff0c;市面上一些问答 API 的对接还是相对没那么容易的&#xff0c;比如说 OpenAI 的 Chat Completions API&#xff0c;它有一个 messages 字段&#xff0c;如果要完成连续对话&#xff0c;需要我们把所有的上下文历史全部传递&#xff0…

猫头虎分享已解决Bug || **Vue.js脚手架安装失败** Error: unable to fetch template`

猫头虎分享已解决Bug &#x1f42f; || Vue.js脚手架安装失败 &#x1f6ab;Error: unable to fetch template 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题…

Maven多环境与SpringBoot多环境配置

1. Maven多环境配置与应用 1.1 多环境开发 我们平常都是在自己的开发环境进行开发&#xff0c; 当开发完成后&#xff0c;需要把开发的功能部署到测试环境供测试人员进行测试使用&#xff0c; 等测试人员测试通过后&#xff0c;我们会将项目部署到生成环境上线使用。 这个时…

Django——会话.CookieSession

Django——会话.Cookie&Session 一、Cookie 会话指的是浏览器与web服务器之间的通信。HTTP协议是无状态协议。web服务器无法知道用户上一次会话数据&#xff0c;用来维护用户在访问网站过程中的状态 &#xff0c; 会话控制使用 Cookie 和 Session 一起实现。 通常把 Ses…

maven远程仓库访问顺序

首先需要了解一下各个配置文件&#xff0c;主要分为三类&#xff1a; 全局配置文件(${maven.home}/conf/settings.xml)&#xff0c;maven安装路径下的/conf/settings.xml用户配置文件(%USER_HOME%/.m2/settings.xml)&#xff0c;windows用户文件夹下项目配置文件&#xff1a;p…

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

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

【Gitlab远程访问本地仓库】Gitlab如何安装配置并结合内网穿透实现远程访问本地仓库进行管理

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

数据结构与算法学习笔记之线性表二---顺序表的静态存储表示和实现(C++)

目录 前言 1.什么是顺序表 2.顺序表的静态存储表示 1.初始化 2.长度 3.数据元素 4.长度 5.获取元素下标 6.前驱节点 7.后继节点 8.插入 9.删除 10.遍历 11.测试代码 前言 这篇文章讲的是顺序表的两种实现方式。 1.什么是顺序表 线性表的顺序表示指的是用一组地址…