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   dhcp
    1  drw-              -  Oct 26 2018 05:33:13   user
    2  -rw-         13,432  Oct 26 2018 05:33:54   default_ca.cer
    3  -rw-             36  Jul 12 2017 04:06:24   $_patchstate_reboot
    4  -rw-     68,955,900  Mar 27 2018 14:25:44   s5720s-li-v200r011c10spc600.cc
    5  -rw-              0  Mar 06 2024 10:04:48   1.txt
    6  -rw-          1,407  Oct 26 2018 05:33:57   default_local.cer
    7  drw-              -  Oct 07 2023 00:52:56   logfile
    8  -rw-            120  Oct 07 2023 00:08:35   vrpcfg.zip
    9  drw-              -  Oct 26 2018 05:33:13   pmdata
   10  drw-              -  Jul 12 2017 04:06:24   $_install_mod
   11  -rw-            836  Mar 05 2024 14:58:24   rr.bak
   12  -rw-            836  Mar 05 2024 14:58:24   rr.dat
   13  -rw-          3,523  Mar 05 2024 15:44:45   config.cfg
   14  -rw-          2,129  Mar 05 2024 15:44:46   private-data.txt
   15  drw-              -  Mar 05 2024 15:44:42   localuser
   16  -rw-         56,565  Mar 27 2018 14:25:45   s5720s-li-v200r011sph005.pat
   17  drw-              -  Oct 26 2018 07:38:19   $_backup
   18  -rw-              4  Oct 29 2018 00:53:20   snmpnotilog.txt
   19  -rw-            200  Oct 26 2018 05:33:58   ca_config.ini
   20  -rw-      1,158,453  Jun 18 2022 20:13:47   help.web
   21  -rw-          3,004  Jun 23 2022 03:14:35   backup20220626.zip

244,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 default
 certificate-check none
#
free-rule-template name default_free_rule
#
portal-access-profile name portal_access_profile
#
aaa
 authentication-scheme default
 authentication-scheme radius
  authentication-mode radius
 authorization-scheme default
 accounting-scheme default
 local-aaa-user password policy administrator 
  password history record number 0
  password expire 0
 domain default
  authentication-scheme radius
  radius-server default
 domain default_admin
  authentication-scheme default
 local-user admin password irreversible-cipher $1a$I2R%>`geIH$:O:gEf+B+Y[J^<W`yS85NO*{8aE~5FQkH%DXA"sR$
 local-user admin privilege level 15
 local-user admin service-type terminal ssh
#
interface Vlanif1
#
interface Vlanif99
 ip address 192.168.200.1 255.255.255.0
#
interface GigabitEthernet0/0/1
 port link-type access
 port 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 0
 authentication-mode aaa
user-interface vty 0 4
 authentication-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)

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

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

相关文章

JAVA虚拟机实战篇之内存调优[4](内存溢出问题案例)

文章目录 版权声明修复问题内存溢出问题分类 分页查询文章接口的内存溢出问题背景解决思路问题根源解决思路 Mybatis导致的内存溢出问题背景问题根源解决思路 导出大文件内存溢出问题背景问题根源解决思路 ThreadLocal占用大量内存问题背景问题根源解决思路 文章内容审核接口的…

尚硅谷JavaScript高级学习笔记

01 准备 JavaScript中函数是对象。我们后续描述构造函数的内存模型时&#xff0c;会将构造函数称为构造函数对象。 02 数据类型 typeof 运算符来查看值的类型&#xff0c;它返回的是类型的字符串值 会做数据转换 03 相关问题 04数据_变量_内存 05相关问题1 06相关问题2 …

办公电脑换成MacBookPro半年之后……

小白是从2008年开始接触电脑的&#xff0c;当时朋友给我注册的第一个QQ账号是2008年4月。 从此&#xff0c;小白一直认为电脑全部都是Windows系统。直到上大学那年&#xff0c;看到了外教老师的MacBookPro…… 折腾电脑的开始居然是起源于诺基亚手机&#xff0c;给半智能S40的…

Igraph入门指南 3

4、图转换到其他R数据结构 图是对实体关系的表达&#xff0c;在igraph中&#xff0c;图可以转换为三种数据结构。 4-1 图转邻接矩阵&#xff1a;as_adjacency_matrix | as_adj&#xff0c;结果是矩阵 邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵&#xff0c;但本函数使用…

老司机都懂的!【打赏】完美运营的最新视频打赏系统

完美运营的最新视频打赏系统优于市面上95%的打赏系统&#xff0c;与其他打赏系统相比&#xff0c;功能更加强大&#xff0c;完美运营且无bug。支付会调、短链接生成、代理后台、价格设置和试看功能等均没有问题。 以上为原简介&#xff0c;经测试验证。成功搭建并可以正常进入…

Linux学习之线程

目录 线程概念 1.什么是线程&#xff1f; 2.线程的优缺点 3.线程异常 4.线程用途 线程操作 1.如何给线程传参 2.线程终止 3.获取返回值 4.分离状态 5.退出线程 线程的用户级地址空间&#xff1a; 线程的局部存储 线程的同步与互斥 互斥量mutex 数据不一致的主要过…

Sora的核心技术预测

在ChatGPT火爆全网的一年后&#xff0c;OpenAI公司又一次大显身手&#xff1a;推出了全新的文生视频大模型Sora。直接输入文字提示词&#xff0c;即可直接生成长达60秒的视频。 “现实真的要不存在了。” 马斯克直接大呼&#xff1a;人类彻底完蛋了&#xff01; 马斯克为什么…

CDN(内容分发网络):加速网站加载与优化用户体验

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【NR技术】 3GPP支持无人机的关键技术以及场景

1 背景 人们对使用蜂窝连接来支持无人机系统(UAS)的兴趣浓厚&#xff0c;3GPP生态系统为UAS的运行提供了极好的好处。无处不在的覆盖范围、高可靠性和QoS、强大的安全性和无缝移动性是支持UAS指挥和控制功能的关键因素。与此同时&#xff0c;监管机构正在调查安全和性能标准以及…

WinSCP下载安装并结合内网穿透实现固定公网TCP地址访问本地服务器

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

二叉树入门

这篇博客通过手动创建的一个简单二叉树&#xff0c;实现二叉树遍历&#xff0c;返回节点&#xff0c;叶子个数&#xff0c;查找结点等相关操作。 1. 二叉树的概念 二叉树不为空时&#xff0c;由根节点&#xff0c;左/右子树组成&#xff0c;逻辑结构如下&#xff0c;当二叉树…

上班族真香副业:工资4500,靠steam游戏搬砖项目月入过w

steam游戏搬砖项目已经存在好多年了&#xff0c;这个项目比较冷门且能持续稳定盈利&#xff0c;是一个非常不错的项目。即使你没玩过steam游戏也没关系&#xff0c;这个steam游戏搬砖项目既不需要你会玩游戏&#xff0c;也不需要你懂英语。 steam游戏搬砖项目的盈利点在汇率差和…

Lwip之TCP服务端示例记录(1对多)

前言 实现多个客户端同时连接初步代码结构已经实现完成(通过轮训的方式) // // Created by shchl on 2024/3/8. // #if 1#include <string.h> #include "lwip/api.h" #include "FreeRTOS.h" #include "task.h" #include "usart.h&…

寻找数组的中心索引

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

斐讯N1 刷coreelec 笔记

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

一文扫荡,12个可视化图表js库,收藏备用。

hello&#xff0c;我是贝格前端工场&#xff0c;可视化图表在web前端开发中经常碰到&#xff0c;是不是很疑惑这些炫酷的图表是怎么实现的&#xff0c;其实是通过js库开发的&#xff0c;本文带来12个javascript库的介绍&#xff0c;欢迎关注我&#xff0c;阅读精彩内容。 一、什…

2024 RubyMine 激活,分享几个RubyMine 激活的方案

文章目录 RubyMine 公司简介我这边使用RubyMine 的理由RubyMine 2023.3 最新变化AI Assistant 正式版对 AI 生成名称建议的支持改进了 Ruby 上下文单元测试生成 RailsRails 应用程序和引擎的自定义路径Rails 路径的自动导入对存储在默认位置之外的模型、控制器和邮件器的代码洞…

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…

C++进阶之路---继承(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承与友元 友元关系不能继承&#xff0c;也就是说基类友元不能访问子类私有和保护成员。 class Student; class Per…

[C语言]——分支和循环(4)

目录 一.随机数生成 1.rand 2.srand 3.time 4.设置随机数的范围 猜数字游戏实现 写⼀个猜数字游戏 游戏要求&#xff1a; &#xff08;1&#xff09;电脑自动生成1~100的随机数 &#xff08;2&#xff09;玩家猜数字&#xff0c;猜数字的过程中&#xff0c;根据猜测数据的⼤…