华为设备使用python实现文件自动保存下载

实验目的:

公司有一台CE12800的设备,管理地址为172.16.1.2,现在需要编写自动化脚本,STELNET实现设备的自动保存配置文件,使用SFTP实现设备的文件下载。

实验拓扑:

实验步骤:

步骤1:将本地电脑和ensp的设备进行桥接,桥接配置如下图所示:

步骤2:配置交换机的IP地址。

<HUAWEI>system-view immediately

[HUAWEI]sysname CE1

[CE1]interface  Vlanif 1

[CE1-Vlanif1]ip address 172.16.1.2 24

[CE1-Vlanif1]quit

[CE1]interface  g1/0/0

[CE1-GE1/0/0]undo  shutdown

测试本地的cmd窗口与CE1设备的连通性。

C:\Users\xxx>ping 172.16.1.2

正在 Ping 172.16.1.2 具有 32 字节的数据:

来自 172.16.1.2 的回复: 字节=32 时间=19ms TTL=255

来自 172.16.1.2 的回复: 字节=32 时间=7ms TTL=255

来自 172.16.1.2 的回复: 字节=32 时间=5ms TTL=255

来自 172.16.1.2 的回复: 字节=32 时间=7ms TTL=255

172.16.1.2 的 Ping 统计信息:

    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 5ms,最长 = 19ms,平均 = 9ms

步骤3:配置CE1的SSH登陆。

  1. 创建SSH登陆的账号

[CE1]aaa

[CE1-aaa]local-user python password cipher Huawei@123

[CE1-aaa]local-user python user-group manage-ug

[CE1-aaa]local-user python service-type ssh

[CE1-aaa]local-user python level 3

  1. 在CE1设备配置SSH用户的认证方式和服务类型。

[CE1]ssh user python

[CE1]ssh user python authentication-type password

[CE1]ssh user  python service-type sftp stelnet

[CE1]ssh user python sftp-directory cfcard:

[CE1]ssh authentication-type default  password

[CE1]sftp server  enable

[CE1]stelnet server enable

步骤4:编写python代码

完整代码如下:

from paramiko import  SSHClient,AutoAddPolicy

from time import  sleep

service_ip = '172.16.1.2'

ssh_user = 'python'

ssh_pass = 'Huawei@123'

class datacom():

    def __init__(self,ip,username,password):

        self.ip = ip

        self.username = username

        self.password = password

        self.ssh = self.ssh_connect()

    def ssh_connect(self):

        ssh = SSHClient()

        ssh.set_missing_host_key_policy(AutoAddPolicy)

        ssh.connect(self.ip,username=self.username,password=self.password)

        return ssh

    def save_config(self):

        shell = self.ssh.invoke_shell()

        shell.send('n\n')

        sleep(2)

        shell.send('save  CE1_save.zip\n')

        sleep(2)

        shell.send('y\n')

        sleep(2)

        shell.send('dir\n')

        sleep(2)

        dis_file = shell.recv(999999).decode()

        print(dis_file)

        self.ssh.close()

    def down_file(self):

        remotename = 'CE1_save.zip'

        localname = r'F:\test\CE1_save.zip'

        self.ssh.open_sftp().get(remotename,localname)

        print('get file succeed')

        self.ssh.close()

if __name__ =='__main__':

    Joinlabs = datacom(service_ip,ssh_user,ssh_pass)

    Joinlabs.save_config()

    Joinlabs = datacom(service_ip,ssh_user,ssh_pass)

    Joinlabs.down_file()

步骤5:编译器执行

步骤6:查看输出结果

Warning: The initial password poses security risks.

The password needs to be changed. Change now? [Y/N]:n

Info: The max number of VTY users is 5, the number of current VTY users online is 1, and total number of terminal users online is 2.

      The current login time is 2023-11-09 14:48:19.

      The last login time is 2023-11-09 11:52:29 from 172.16.1.1 through SSH.

<CE1>save  CE1_save.zip

Warning: Are you sure to save the configuration to cfcard:/CE1_save.zip? [Y/N]:y

Now saving the current configuration to the slot 17

Info: Save the configuration successfully.

<CE1>dir

Directory of cfcard:/

  Idx  Attr     Size(Byte)  Date        Time       FileName                    

    0  dr-x              -  Nov 09 2023 10:03:28   $_checkpoint                

    1  dr-x              -  Nov 09 2023 09:36:26   $_install_mod               

    2  dr-x              -  Nov 09 2023 09:37:01   $_license                   

    3  dr-x              -  Nov 09 2023 09:37:06   $_security_info             

    4  dr-x              -  Nov 09 2023 09:37:03   $_system                    

    5  -rw-              0  Nov 09 2023 09:36:26   CE12800                     

    6  -rw-            866  Nov 09 2023 14:48:23   CE1_save.zip                 

    7  -rw-  104  Nov 09 2023 09:36:26   VRPV800R011C00SPC607B607D0203_s12800.cc

    8  -rw-          2,893  Nov 09 2023 14:48:23   device.sys                  

    9  -rw-          1,718  Nov 09 2023 10:13:31   test.cfg                    

   10  -rw-          1,718  Nov 09 2023 09:36:26   vrpcfg.cfg                  

8,388,608 KB total (6,224,796 KB free)

<CE1>

get file succeed

通过以上输出可以看出,设备的文件系统多了CE1_save.zip的保存配置文件。并且执行结果输出了get file succeed ,表示下载文件成功,在本地电脑上查看F:\test 路径中是否存在

CE1_save.zip。

代码解析:

(1)导入库

from paramiko import  SSHClient,AutoAddPolicy

from time import  sleep

(2)定义变量

service_ip = '172.16.1.2'

ssh_user = 'python'

ssh_pass = 'Huawei@123'

将SSH 登陆需要用的IP、用户名、密码定义为变量。

(3)定义类

class datacom():

定义类datacom,类名为datacom。在此类中定义三个方法 ssh_connect()、save_config()、down_file()。

ssh_connect()用于建立SSH连接;

save_config()用于保存设备配置;

down_file()用于下载设备的文件。

(4)定义构造函数

    def __init__(self,ip,username,password):

        self.ip = ip

        self.username = username

        self.password = password

        self.ssh = self.ssh_connect()

构造方法__init__用于创建实例对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调用它,用来初始化对象的某些属性。

def __init__(self,ip,username,password) 表示在调用类 datacom()时,所需要填入的ip地址,用户名和密码。

self.ip、self.username、self.password可以在同一个类的函数下进行传参的动作。

self.ssh = self.ssh_connect()代表调用下个步骤定义的ssh_connect()这个方法。

(5)定义ssh_connect()方法,用于建立SSH连接。

    def ssh_connect(self):

        ssh = SSHClient()

        ssh.set_missing_host_key_policy(AutoAddPolicy)

        ssh.connect(self.ip,username=self.username,password=self.password)

        return ssh

ssh.connect(self.ip,username=self.username,password=self.password)代表ssh登陆网络设备时,将输入ip、用户名、密码三个参数。

(6)定义save_config()方法,用于保存设备配置。

    def save_config(self):

        shell = self.ssh.invoke_shell()#调用构造函数中的self.ssh,而self.ssh就是用于建立ssh连接的,并且开启交互式会话

        shell.send('n\n') #输入命令no ,登陆是设备提示修改密码,此时输入n代表不修改密码

        sleep(2)

        shell.send('save  CE1_save.zip\n') #输入命令save  CE1_save.zip 将保存的文件命名为CE1_save.zip

        sleep(2)

        shell.send('y\n')

        sleep(2)

        shell.send('dir\n')

        sleep(2)

        dis_file = shell.recv(999999).decode()

        print(dis_file)

        self.ssh.close()

(7)定义down_file()方法,用于下载配置文件

    def down_file(self):

        remotename = 'CE1_save.zip'

        localname = r'F:\test\CE1_save.zip'

        self.ssh.open_sftp().get(remotename,localname)

        print('get file succeed')

        self.ssh.close()

(8)定义主函数,顺序执行

if __name__ =='__main__':

    Joinlabs = datacom(service_ip,ssh_user,ssh_pass)

    Joinlabs.save_config()

    Joinlabs = datacom(service_ip,ssh_user,ssh_pass)

    Joinlabs.down_file()

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

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

相关文章

深入Rust的模式匹配与枚举类型

今天&#xff0c;我们将深入探讨Rust语言中的两个强大特性&#xff1a;模式匹配&#xff08;Pattern Matching&#xff09;和枚举类型&#xff08;Enums&#xff09;。这两个特性是Rust提供的核心工具之一&#xff0c;它们在处理多种类型的数据和复杂的逻辑控制中发挥着关键作用…

手把手教你如何实现List——ArrayList

目录 前言&#xff1a; 线性表 顺序表 接口的实现 一. 打印顺序表 二.新增元素,默认在数组最后新增 三.在 pos 位置新增元素 四.判定是否包含某个元素 五. 查找某个元素对应的位置 六.获取 pos 位置的元素 七.给 pos 位置的元素设为 value 八.删除第一次出现的关键字k…

Python中如何用栈实现队列

目录 一、引言 二、使用两个栈实现队列 三、性能分析 四、应用场景 五、代码示例 六、优缺点总结 一、引言 队列&#xff08;Queue&#xff09;和栈&#xff08;Stack&#xff09;是计算机科学中常用的数据结构。队列是一种特殊的线性表&#xff0c;只允许在表的前端进行…

HTTPS的介绍以及工作过程

目录 一.HTTPS是什么&#xff1f; HTTPS的介绍 HTTPS产生的背景 二.https的安全机制 加密是什么 如何加密 客户端如何获取公钥 总结 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f3a5; 本文由 tq02 原创&#xff0…

OkHttp的配置

一、拦截器 1.添加拦截器的作用&#xff1a; 每次在请求过程中就会回调一次intercept方法 2.拦截器的回调方法里我们可以做那些事情&#xff1a; 当前的请求还没有发给服务器&#xff0c;比如我们在与服务器通信的时候&#xff0c;一个应用中很多地方都会跟服务器发起通信。…

Linux端口流量统计

Ubuntu sudo apt-get install wiresharkCentOS sudo yum install wiresharkUDP端口统计 sudo tshark -i <interface> -f "udp port <port_number>" -a duration:60 -q -z conv,udp请将 替换为你的网络接口&#xff0c;<port_number> 替换为要监…

ASP.NET Core 使用 SignalR 实现实时通讯

&#x1f433;简介 SignalR是一个用于ASP.NET的库&#xff0c;它允许服务器代码向连接的客户端实时发送推送通知。它使用WebSockets作为底层传输机制&#xff0c;但如果浏览器不支持WebSockets&#xff0c;它会自动回退到其他兼容的技术&#xff0c;如服务器发送事件&#xff…

Linux常用命令----shutdown命令

文章目录 命令概述参数解释使用示例及解释 命令概述 shutdown 命令用于安全地关闭或重启 Linux 系统。它允许管理员指定一个时间点执行操作&#xff0c;并可发送警告信息给所有登录的用户。 参数解释 时间参数 ([时间]): now: 立即执行关闭或重启操作。m: 在 m 分钟后执行操作…

centos7.9 + gitlab12.3.0安装

本文在centos7.9操作系统上安装gitlab 12.3.0&#xff0c;gitlab官方最新的版本已经是16.6.0了&#xff0c;这里仍然安装12.3.0版本的原因是汉化包的最新版本是12.3.0&#xff0c;如果汉化包的版本和gitlab的版本不对应&#xff0c;会出现汉化他无法启动的现象。 1、安装依赖 …

Web UI自动化测试框架

WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动化测试框架。 特点 提供更加简单API编写自动化测试。提供脚手架&#xff0c;快速生成自动化测试项目。自动生成HTML测试报告生成。自带断言方法&#xff0c;断言…

07-学成在线修改/查询课程的基本信息和营销信息

修改/查询单个课程信息 界面原型 第一步: 用户进入课程列表查询页面,点击编辑按钮编辑课程的相关信息 第二步: 进入编辑界面显示出当前编辑课程的信息,其中课程营销信息不是必填项,修改成功后会自动进入课程计划编辑页面 查询课程信息 请求/响应数据模型 使用Http Client测…

89基于matlab的人工蜂群和粒子群混合优化的路径规划算法

基于matlab的人工蜂群和粒子群混合优化的路径规划算法&#xff0c;起点和终点确定的前提下&#xff0c;在障碍物中寻找最佳路径。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 89人工蜂群和粒子群混合优化 (xiaohongshu.com)https://www.xiaohongshu.com/e…

【Vue】绝了!这生命周期流程真...

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue系列持续发放&#xff0c;涵盖大量的经验和示例&#xff0c;如果对您有用&#xff0c;可以点赞收藏哈~ 生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的…

Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决

背景 书接上回&#xff1a; Android flutter项目 启动优化实战&#xff08;一&#xff09;使用benchmark分析项目 已经分析出了问题: 1.缩短总时长&#xff08;解决黑屏问题、懒启动、优化流程&#xff09;、2.优化启动项&#xff08;使用App Startup&#xff09;、3.提升用…

java基础-IO

1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分&#xff0c;因为系统会存在大量处理设备上的数据&#xff0c;这里的设备指硬盘&#xff0c;内存&#xff0c;键盘录入&#xff0c;网络传输等。当然这里需要考虑的问题不仅仅是实现&#xff0c;还包括同步…

【问题系列】消费者与MQ连接断开问题解决方案(一)

1. 问题描述 当使用RabbitMQ作为中间件&#xff0c;而消费者为服务时&#xff0c;可能会出现以下情况&#xff1a;在长时间没有消息传递后&#xff0c;消费者与RabbitMQ之间出现连接断开&#xff0c;导致无法处理新消息。解决这一问题的方法是重启Python消费者服务&#xff0c;…

redis运维(二十二)redis 的扩展应用 lua(四)

一 最佳实践 ① 铺垫 最佳实践&#xff1a;1、把redis操作所需的key通过KEYS进行参数传递2、其它的lua脚本所需的参数通过ARGV进行传递. redis lua脚本原理 Redis Lua脚本的执行原理 ② 删除指定的脚本缓存 ③ redis集群模式下使用lua脚本注意事项 1、常见报错现象 C…

草图大师sketchup道路怎么快速种树?

草图大师sketchup道路怎么快速种树&#xff1f;草图大师中的道路图纸想要在道路两旁种树&#xff0c;该怎么快速给道路种树呢&#xff1f;下面我们就来看看详细的教程&#xff0c;需要的朋友可以参考下 草图大师sketchup中想要快速种树&#xff0c;该怎么种多棵树呢&#xff1…

别太担心,人类只是把一小部分理性和感性放到了AI里

尽管人工智能&#xff08;AI&#xff09;在许多方面已经取得了重大进展&#xff0c;但它仍然无法完全复制人类的理性和感性。AI目前主要侧重于处理逻辑和分析任务&#xff0c;而人类则具有更复杂的思维能力和情感经验。 人类已经成功地将一些可以数据化和程序化的理性和感性特征…

JavaEE进阶学习:Bean 作用域和生命周期

1.Bean 作用域 .通过一个案例来看 Bean 作用域的问题 假设现在有一个公共的 Bean&#xff0c;提供给 A 用户和 B 用户使用&#xff0c;然而在使用的途中 A 用户却“悄悄”地修改了公共 Bean 的数据&#xff0c;导致 B 用户在使用时发生了预期之外的逻辑错误。 我们预期的结果…