Python通过SFTP实现网络设备配置备份

一、背景

为了防止网络设备意外损坏,导致配置文件无法恢复,可以通过将网络设备的配置文件备份到本地电脑上。

一般情况下,设备支持通过FTP、TFTP、FTPS、SFTP和SCP备份配置文件。其中使用FTP和TFTP备份配置文件比较简单,但是存在安全风险。在安全要求比较高的场景中,建议使用FTPS、SFTP和SCP备份配置文件。以下仅以SFTP作为示例介绍备份配置文件。

二、 实验信息

1、实验环境

本文采用python主机与网络设备通过网线直连的方式进行实验,实操当中,我们可以通过已配置完成网络通信并已开通ssh及sftp的网络设备进行配置备份,所以说此实验与实操基本一样,可以使用本文代码,只需修改网络设备信息即可。

2、设备信息

①网络设备

IP:192.168.200.1

username=python

password=python@network

ssh端口:22

目标备份文件:/config.cfg

<xxx>dir
Directory of flash:/Idx  Attr     Size(Byte)  Date        Time       FileName 0  drw-              -  Oct 26 2018 05:33:48   dhcp1  drw-              -  Oct 26 2018 05:33:13   user2  -rw-         13,432  Oct 26 2018 05:33:54   default_ca.cer3  -rw-             36  Jul 12 2017 04:06:24   $_patchstate_reboot4  -rw-     68,955,900  Mar 27 2018 14:25:44   s5720s-li-v200r011c10spc600.cc5  -rw-              0  Mar 06 2024 10:04:48   1.txt6  -rw-          1,407  Oct 26 2018 05:33:57   default_local.cer7  drw-              -  Oct 07 2023 00:52:56   logfile8  -rw-            120  Oct 07 2023 00:08:35   vrpcfg.zip9  drw-              -  Oct 26 2018 05:33:13   pmdata10  drw-              -  Jul 12 2017 04:06:24   $_install_mod11  -rw-            836  Mar 05 2024 14:58:24   rr.bak12  -rw-            836  Mar 05 2024 14:58:24   rr.dat13  -rw-          3,523  Mar 05 2024 15:44:45   config.cfg14  -rw-          2,129  Mar 05 2024 15:44:46   private-data.txt15  drw-              -  Mar 05 2024 15:44:42   localuser16  -rw-         56,565  Mar 27 2018 14:25:45   s5720s-li-v200r011sph005.pat17  drw-              -  Oct 26 2018 07:38:19   $_backup18  -rw-              4  Oct 29 2018 00:53:20   snmpnotilog.txt19  -rw-            200  Oct 26 2018 05:33:58   ca_config.ini20  -rw-      1,158,453  Jun 18 2022 20:13:47   help.web21  -rw-          3,004  Jun 23 2022 03:14:35   backup20220626.zip244,164 KB total (57,868 KB free)

②python主机信息

ip:192.168.200.2/24

目标备份存放位置:

3、实验目的

通过python脚本将目标备份文件:/config.cfg成功备份到python主机的D:\Network_backup目录下

三、Python中paramiko模块简介

1、paramiko模块

Paramiko是python实现SSHv2协议的模块之一,它可以实现安全的远程命令执行,文件传输等功能。

Paramiko常用的两个类SSHClient和SFTPClient,分别提供SSH和SFTP功能。

2、使用流程

3、常用类

  • Channel:该类用于创建SSH Transport上的通道
  • Transport:该类用于对象上创建一个会话对象
  • SFTPClient:该类通过一个打开的SSH会话创建SFTP会话通道并执行命令
  • SSHClient:该类是与SSH服务器会话的高级表示,集成了Transport,Channle和SFTPClient
  • Host keys:该类用于创建一个密钥或密码对象

4、对象/类示例

①transport(socket)

# 引入paramiko模块
import paramiko
# 建立Transport对象,实例化SSH会话通道
tran = paramiko.Transport(('192.168.200.1',22))
# 建立SSH会话连接,并使用密码进行身份验证
tran.connect(username='python',password='admin@123')

②from_transport()

# 引入paramiko模块
import paramiko
# 建立Transport对象,实例化SSH会话通道
tran = paramiko.Transport(('192.168.200.1',22))
# 建立SSH会话连接,并使用密码进行身份验证
tran.connect(username='python',password='admin@123')
#定义变量sftp,并从打开的Transport创建一个SFTP会话连接
sftp = paramiko.SFTPClient.from_transport(tran)

③get()

# 引入paramiko模块
import paramiko
# 建立Transport对象,实例化SSH会话通道
tran = paramiko.Transport(('192.168.200.1',22))
# 建立SSH会话连接,并使用密码进行身份验证
tran.connect(username='python',password='admin@123')
# 定义变量sftp,并从打开的Transport创建一个SFTP会话连接
sftp = paramiko.SFTPClient.from_transport(tran)
# 定义变量local_path
local_path = r'D:\Network_backup'
# 定义变量remote_path
remote_path = '/config.cfg'
# 从远程地址下载指定文件到本地路径
sftp.get(remote_path,local_path)
#关闭会话
tran.close()

④put()

# 引入paramiko模块
import paramiko
# 建立Transport对象,实例化SSH会话通道
tran = paramiko.Transport(('192.168.200.1',22))
# 建立SSH会话连接,并使用密码进行身份验证
tran.connect(username='python',password='admin@123')
# 定义变量sftp,并从打开的Transport创建一个SFTP会话连接
sftp = paramiko.SFTPClient.from_transport(tran)
# 定义变量local_path
local_path = r'D:\local_path\test.cfg'
# 定义变量remote_path,由于网络设备配置文件在根目录/
remote_path = '/'
# 从本地路径文件上传到远程路径
sftp.get(local_path,remote_path)
# 关闭会话
tran.close()

⑤其他常用对象/类功能

常用方法功能/作用
connect()实现远程服务器连接与认证
set_missing_host_key_policy()设置连接到没有已知主机密钥的服务器时使用策略
load_system_host_keys()从系统文件加载主机密钥
exec_command()在远程服务器执行命令
invoke_shell()在远程服务器启动交互shell会话
open_sftp()在一个会话连接中创建sftp通道
close()关闭连接

 四、实验配置备份

1、PermissionError: [Errno 13] Permission denied:排错

通过上面2张照片可以看出PermissionError: [Errno 13] Permission denied错误是由于打开目标不是文件而是目录造成,所以可以修改代码如下:

2、local_path = r'D:/文件夹\文件名

导出配置如下:


!Software Version V200R011C10SPC600
#
sysname xxx
#
undo info-center enable
#
vlan batch 99
#
authentication-profile name default_authen_profile
authentication-profile name dot1x_authen_profile
authentication-profile name mac_authen_profile
authentication-profile name portal_authen_profile
authentication-profile name dot1xmac_authen_profile
authentication-profile name multi_authen_profile
#
clock timezone Beijing add 08:00:00
#
radius-server template default
#
pki realm defaultcertificate-check none
#
free-rule-template name default_free_rule
#
portal-access-profile name portal_access_profile
#
aaaauthentication-scheme defaultauthentication-scheme radiusauthentication-mode radiusauthorization-scheme defaultaccounting-scheme defaultlocal-aaa-user password policy administrator password history record number 0password expire 0domain defaultauthentication-scheme radiusradius-server defaultdomain default_adminauthentication-scheme defaultlocal-user admin password irreversible-cipher $1a$I2R%>`geIH$:O:gEf+B+Y[J^<W`yS85NO*{8aE~5FQkH%DXA"sR$local-user admin privilege level 15local-user admin service-type terminal ssh
#
interface Vlanif1
#
interface Vlanif99ip address 192.168.200.1 255.255.255.0
#
interface GigabitEthernet0/0/1port link-type accessport default vlan 99
#
interface GigabitEthernet0/0/2
#
interface GigabitEthernet0/0/3
#
interface GigabitEthernet0/0/4
#
interface GigabitEthernet0/0/5
#
interface GigabitEthernet0/0/6
#
interface GigabitEthernet0/0/7
#
interface GigabitEthernet0/0/8
#
interface GigabitEthernet0/0/9
#
interface GigabitEthernet0/0/10
#
interface GigabitEthernet0/0/11
#
interface GigabitEthernet0/0/12
#
interface GigabitEthernet0/0/13
#
interface GigabitEthernet0/0/14
#
interface GigabitEthernet0/0/15
#
interface GigabitEthernet0/0/16
#
interface GigabitEthernet0/0/17
#
interface GigabitEthernet0/0/18
#
interface GigabitEthernet0/0/19
#
interface GigabitEthernet0/0/20
#
interface GigabitEthernet0/0/21
#
interface GigabitEthernet0/0/22
#
interface GigabitEthernet0/0/23
#
interface GigabitEthernet0/0/24
#
interface GigabitEthernet0/0/25
#
interface GigabitEthernet0/0/26
#
interface GigabitEthernet0/0/27
#
interface GigabitEthernet0/0/28
#
interface GigabitEthernet0/0/29
#
interface GigabitEthernet0/0/30
#
interface GigabitEthernet0/0/31
#
interface GigabitEthernet0/0/32
#
interface GigabitEthernet0/0/33
#
interface GigabitEthernet0/0/34
#
interface GigabitEthernet0/0/35
#
interface GigabitEthernet0/0/36
#
interface GigabitEthernet0/0/37
#
interface GigabitEthernet0/0/38
#
interface GigabitEthernet0/0/39
#
interface GigabitEthernet0/0/40
#
interface GigabitEthernet0/0/41
#
interface GigabitEthernet0/0/42
#
interface GigabitEthernet0/0/43
#
interface GigabitEthernet0/0/44
#
interface GigabitEthernet0/0/45
#
interface GigabitEthernet0/0/46
#
interface GigabitEthernet0/0/47
#
interface GigabitEthernet0/0/48
#
interface GigabitEthernet0/0/49
#
interface GigabitEthernet0/0/50
#
interface GigabitEthernet0/0/51
#
interface GigabitEthernet0/0/52
#
interface NULL0
#
stelnet ipv4 server enable
stelnet ipv6 server enable
#
user-interface con 0authentication-mode aaa
user-interface vty 0 4authentication-mode aaa
user-interface vty 16 20
#
dot1x-access-profile name dot1x_access_profile
#
mac-access-profile name mac_access_profile
#
return  

五、Python代码

import os
import paramiko
from paramiko import SSHClient
from paramiko import SFTPClient
tran = paramiko.Transport(('192.168.200.1',22))
tran.connect(username='python',password='python@network')
sftp = paramiko.SFTPClient.from_transport(tran)
local_path = r'D:\20240308'
remote_path = '/config.cfg'
sftp.get(remote_path,local_path)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习Diffusion Models: Sharon Zhou

How Diffusion Models Work 本文是 https://www.deeplearning.ai/short-courses/how-diffusion-models-work/ 这门课程的学习笔记。 文章目录 How Diffusion Models WorkWhat you’ll learn in this course [1] Intuition[2] SamplingSetting Things UpSamplingDemonstrate i…

开源模型应用落地-工具使用篇-Ollama(六)

一、前言 在AI大模型百花齐放的时代&#xff0c;很多人都对新兴技术充满了热情&#xff0c;都想尝试一下。但是&#xff0c;实际上要入门AI技术的门槛非常高。除了需要高端设备&#xff0c;还需要面临复杂的部署和安装过程&#xff0c;这让很多人望而却步。不过&#xff0c;随着…

RabbitMQ的web控制端介绍

2.1 web管理界面介绍 connections&#xff1a;无论生产者还是消费者&#xff0c;都需要与RabbitMQ建立连接后才可以完成消息的生产和消费&#xff0c;在这里可以查看连接情况channels&#xff1a;通道&#xff0c;建立连接后&#xff0c;会形成通道&#xff0c;消息的投递、获取…

html--心花怒放

代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Canvas 绘制一个❤</title><link rel"shortcut icon" href"../../assets/images/icon/favicon.ico" type"ima…

嵌入式学习36-TCP要点及http协议

TCP发送文件的粘包问题 1. 例&#xff1a; 发端 1.flv-------->收端 1.flv csfga 2.解决 1. sleep&#xff08;1&#xff09; 延时发送 2.自…

SHARE 100M PRO:航测领域的多面手

在无人机航测领域&#xff0c;SHARE 100M PRO单镜头航测相机以其1.02亿像素的中画幅传感器和创新技术&#xff0c;正在重塑倾斜摄影的精度和效率。这款相机不仅在城市规划和土地管理中发挥着重要作用&#xff0c;还在环境监测、基础设施建设、农业管理等多个航测领域展现出其卓…

斐讯N1 刷coreelec 笔记

1.下载恩山的镜像 下载好后不需要刷优盘 这个很方便&#xff0c;可以勾选擦除flash &#xff08;如果第一次装&#xff09; 升级可以不用勾选 详细使用参考恩山大佬的描述 2.下载插件 想装openwrt 发现镜像里面 coreelec-addons 挂了&#xff0c;研究了好长时间可以 去githu…

MRI基础--k空间

k空间定义 k空间是表示 MR 图像中空间频率的数字数组。 k空间物理意义 k 空间的单元通常显示在主轴 kx 和 ky 的矩形网格上。 k 空间的 kx 和 ky 轴对应于图像的水平 (x) 和垂直 (y) 轴。然而,k 轴表示 x 和 y 方向上的空间频率而不是位置。 k 空间中的各个点 (kx,ky) 与图像…

R语言 | 复数 相关函数

问题 大家好&#xff0c;我有一个问题&#xff0c;我看到一个函数如下&#xff1a; L2_distance <- function(A, B){rowA <- apply(A*A, 1, sum)matrixA <- matrix(rep(rowA, eachlength(rowA)), nrowlength(rowA), byrowT)rowB <- apply(B*B, 1, sum)matrixB &l…

#QT(智能家居界面上-图片插入)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 (1)添加图片文件&#xff08;图片资源文件&#xff0c;PNG格式为佳&#xff09; &#xff08;2&#xff09;将图片放入工程文件夹 &#xff08;3&#xff09;按如下步骤将图片加入到工程中&#xff08;pic.qrs文件夹&#xff09; &…

【二】【算法分析与设计】编程练习

数字三角形 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 KiKi学习了循环&#xff0c;BoBo…

【C++】vector的迭代器失效问题深浅拷贝

vector的迭代器失效问题&深浅拷贝 一&#xff0c;vector迭代器失效问题1. 什么是迭代器失效2. insert()导致的迭代器失效问题3. 解决办法4. erase() 导致的迭代器失效问题5. 解决办法 二&#xff0c;深浅拷贝问题1. 什么是深浅拷贝问题2.reserve的深度解析3.解决办法 一&am…