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

实验目的:

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

实验拓扑:

实验步骤:

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

步骤2:配置交换机的IP地址。
<HUAWEI>system-view immediately

HUAWEIsysname CE1

CE1interface Vlanif 1

CE1-Vlanif1ip address 172.16.1.2 24

CE1-Vlanif1quit

CE1interface g1/0/0

CE1-GE1/0/0undo 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登陆的账号

CE1aaa

CE1-aaalocal-user python password cipher Huawei@123

CE1-aaalocal-user python user-group manage-ug

CE1-aaalocal-user python service-type ssh

CE1-aaalocal-user python level 3

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

CE1ssh user python

CE1ssh user python authentication-type password

CE1ssh user python service-type sftp stelnet

CE1ssh user python sftp-directory cfcard:

CE1ssh authentication-type default password

CE1sftp server enable

CE1stelnet 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()

相关推荐
青 春 记 忆5 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO35 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
MC皮蛋侠客5 小时前
DNP3 系列(十二):测试与工具链——模拟器、Wireshark 与一致性测试
网络·wireshark·dnp3
观测云7 小时前
Fastjson 高危 RCE(CVE-2026-16723):如何用观测云快速发现并完成修复
网络·安全·可观测性·观测云
临沂GEO7 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白7 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
楷哥爱开发9 小时前
TikTok Shop新加坡本土店入驻:如何选择新加坡本土住宅IP?
网络·网络协议·tcp/ip
荷蒲9 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
网安蟹佬霸9 小时前
# 网络流量分析实战:从Wireshark到入侵检测系统构建(2026最新版,附完整流量分析链与IDS规则集)
网络·测试工具·安全·开源·wireshark·密码学·哈希算法
Magic-ZYJ10 小时前
HarmonyOS Release 构建安全:ArkGuard 混淆、签名配置与秘密管理
安全·华为·harmonyos·移动应用开发·心晴手记