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.mzph.cn/news/730462.shtml

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

相关文章

K线实战分析系列之十八:十字线——判断行情顶部的有效信号

K线实战分析系列之十八&#xff1a;十字线——判断行情顶部的有效信号 一、十字线二、十字线总结三、三种特殊十字线四、长腿十字线五、墓碑十字线六、蜻蜓十字线七、特殊十字线总结 一、十字线 重要的反转信号 幅度较大的下跌&#xff0c;出现一根十字线&#xff0c;正好是在…

编译内核错误 multiple definition of `yylloc‘

编译内核错误 # make ARCHarm CROSS_COMPILEarm-mix410-linux- uImageHOSTLD scripts/dtc/dtc /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss0x10): multiple definition of yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss0x0): first defined here collect2: error: ld ret…

【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码

介绍 wu-smart-acw-client 简称acw-client&#xff0c;是一个基于Lazy ORM定制的客户端代码生成小工具 Lazy ORM 小工具 acw 本地客户端 你负责点击页面&#xff0c;他负责输出代码安装 <dependency><groupId>top.wu2020</groupId><artifactId>wu-sma…

数据结构——lesson7二叉树 堆的介绍与实现

前言&#x1f49e;&#x1f49e; 啦啦啦~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记 &#x1f4a5;对于数据结构顺序表链表有疑问的都可以在上面数据结…

第四届信息通信与软件工程国际会议(ICICSE 2024)即将召开!

2024年第四届信息通信与软件工程国际会议&#xff08;ICICSE 2024&#xff09;将于2024年5月10-12日在中国北京举办。本次会议由北京工业大学、IEEE以及Comsoc 联合主办。随着当今社会信息化的高速发展&#xff0c;电子信息技术的应用更是随处可见。其中&#xff0c;信息通信与…

备份 ChatGPT 的聊天纪录

备份 ChatGPT 的聊天纪录 ChatGPT 在前阵子发生了不少次对话纪录消失的情况&#xff0c;让许多用户觉得困扰不已&#xff0c;也担心自己想留存的聊天记录消失不见。 好消息是&#xff0c;OpenAI 在 2023 年 4 月 11 日推出了 ChatGPT 聊天记录备份功能&#xff0c;无论是免费…

Redis什么这么快和Redis单线程模型和多线程

概述 1、完全基于内存&#xff0c;绝大部分请求是纯粹的内存操作&#xff0c;非常快速。数据存在内存中&#xff0c;类似于HashMap&#xff0c;HashMap的优势就是查找和操作的时间复杂度都是O(1)&#xff1b; 2、数据结构简单&#xff0c;对数据操作也简单&#xff0c;Redis中…

二叉树入门

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

Postman(注册,使用,作用)【详解】

目录 一、Postman 1. Postman介绍 2. 安装Postman 3. 注册帐号再使用(可保存测试记录) 4. 创建workspace 5. 测试并保存测试记录 一、Postman postman工具可以发送不同方式的请求,浏览器只能发送get请求(所有用这个工具) 在前后端分离开发模式下&#xff0c;前端技术人员…

Spring Boot中SQL语句报错

报错原因&#xff1a; You have an error in your SQL syntax 你的SQL语句出现错误 报错位置&#xff1a; check the manual that corresponds to your MySQL server version for the right syntax to use near :/sql/schema.sql.t_film at line 1 在:/sql/schema.sql附近使用…

主网NFT的发布合约

1.什么是nft? NFT:Non-fungible-token 非同质化货币 2.新建suimove项目 使用sui move new 项目名命令新建sui move项目 sui move new nft_qyx项目结构如下: 3.写nft合约 module qyx123::nft{use sui::object::{Self, UID};use sui::transfer;use sui::tx_context::{Sel…

【工具】Raycast – Mac提效工具

引入 以前看到同事们锁屏的时候&#xff0c;不知按了什么键&#xff0c;直接调出这个框&#xff0c;然后输入lock屏幕就锁了。 跟我习惯的按Mac开机键不大一样。个人觉得还是蛮炫酷的&#xff5e; 调研 但是由于之前比较繁忙&#xff0c;这件事其实都忘的差不多了&#xff0…

JVM-垃圾收集底层算法实现

三色标记 背景描述 在并发标记的过程中&#xff0c;因为标记期间应用线程还在继续跑&#xff0c;对象间的引用可能发生变化&#xff0c;多标和漏标的情况就有可能发生。 如何解决上面的问题&#xff1f; 引入“三色标记” 意思就是&#xff0c;把Gcroots可达性分析遍历对象过程…

BUUCTF---[MRCTF2020]你传你呢1

1.题目描述 2.打开题目链接 3.上传shell.jpg文件&#xff0c;显示连接成功&#xff0c;但是用蚁剑连接却连接不上。shell文件内容为 <script languagephp>eval($_REQUEST[cmd]);</script>4.用bp抓包&#xff0c;修改属性 5.需要上传一个.htaccess的文件来把jpg后缀…

[递归、搜索、回溯]----递归

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

【操作系统概念】 第9章:虚拟内存管理

文章目录 0.前言9.1 背景9.2 按需调页9.2.1 基本概念9.2.2 按需调页的性能 9.3 写时复制9.4 页面置换9.4.1 基本页置换9.4.2 FIFO页置换9.4.3 最优(Optimal)置换9.4.4 LRU&#xff08;Least Recently Used&#xff09;页置换9.4.5 近似LRU页置换9.4.6 页缓冲算法 9.5 帧分配9.5…

探索数据结构:单链表的实战指南

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty‘s blog 前言 在上一章节中我们讲解了数据结构中的顺序表&#xff0c;知道了顺序…

3.8 动态规划 背包问题

一.01背包 46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; (kamacoder.com) 代码随想录 (programmercarl.com) 携带研究材料: 时间限制&#xff1a;5.000S 空间限制&#xff1a;128MB 题目描述: 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会…

2001-2022年上市公司利润表数据

2001-2022年上市公司利润表数据 1、时间&#xff1a;2001.12.31-2022.12.31 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、统计截止日期、报表类型、投资收益、其中&#xff1a;对联营企业和合营企业的投资收益、公允价值变动收益、营业利润、其他综…

探讨2024年AI辅助研发的趋势

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今时代最具变革性的技术之一。AI的广泛应用正在重塑各行各业&#xff0c;其中&#xff0c;AI辅助研发作为科技和工业领域的一大创新热点&#xff0c;正引领着研发模式的深刻变革。从医药…