华为设备使用python配置netconf 功能

news2024/11/30 20:49:34

实验目的:

公司有一台CE12800的设备,管理地址位172.16.1.2,现在需要编写自动化脚本,通过SSH登陆到设备上配置netconf协议的用户名,密码以及netconf服务,并且通过netconf协议将设备的loopback0接口IP地址配置为1.1.1.1/32。

实验拓扑:

实验步骤:

步骤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

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

[CE1]ssh user python

[CE1]ssh user python authentication-type password

[CE1]ssh user python service-type stelnet

(3)配置vty用于的登陆方式,及开启stenet服务

[CE1]stelnet server  enable

Info: Succeeded in starting the STelnet server.

[CE1]user-interface vty 0 4

[CE1-ui-vty0-4]authentication-mode  aaa

[CE1-ui-vty0-4]protocol  inbound ssh

[CE1-ui-vty0-4]user  privilege level  3

[CE1-ui-vty0-4]q

步骤4:编写python代码

完整代码:

from paramiko import  SSHClient,AutoAddPolicy

from ncclient import manager

from ncclient import operations

from time import  sleep



service_ip = '172.16.1.2'

ssh_user = 'python'

ssh_pass = 'Huawei@123'

netconf_user = 'netconf'

netconf_pass = 'Huawei@123'

port = '830'

XMLS = '''<config>

      <ethernet xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">

        <ethernetIfs>

          <ethernetIf operation="merge">

            <ifName>GE1/0/2</ifName>

            <l2Enable>disable</l2Enable>

          </ethernetIf>

        </ethernetIfs>

      </ethernet>

      <ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">

        <interfaces>

          <interface operation="merge">

            <ifName>Loopback0</ifName>

            <ifDescr>Config by NETCONF</ifDescr>

            <ifmAm4>

              <am4CfgAddrs>

                <am4CfgAddr operation="create">

                  <subnetMask>255.255.255.255</subnetMask>

                  <addrType>main</addrType>

                  <ifIpAddr>1.1.1.1</ifIpAddr>

                </am4CfgAddr>

              </am4CfgAddrs>

            </ifmAm4>

          </interface>

        </interfaces>

      </ifm>

    </config>'''





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 ssh_config(self):

        shell = self.ssh.invoke_shell()

        shell.send('n\n')

        f = open("config_netconf.txt")

        cmd = f.readlines()

        for i in cmd:

            shell.send(i)

            sleep(2)



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

        print(dis_this)

        self.ssh.close()





def netconf_connect(host, port, user, password):

    return manager.connect(host=host,

                       port=port,

                       username=user,

                       password=password,

                       hostkey_verify = False,

                       device_params={'name': "huawei"},

                       allow_agent = False,

                       look_for_keys = False)







if __name__ == '__main__':

    joinlabs = datacom(service_ip,ssh_user,ssh_pass)

    joinlabs.ssh_config()

    netconf = netconf_connect(service_ip,port,netconf_user,netconf_pass)

    netconf.edit_config(target='running',config=XMLS)

步骤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 1.

      The current login time is 2023-11-09 20:09:21.

      The last login time is 2023-11-09 19:40:14 from 172.16.1.1 through SSH.

<CE1>system-view immediately

Enter system view, return user view with return command.

[CE1]aaa

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

Info: A new user is added.

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

[CE1-aaa]local-user netconf level 3

[CE1-aaa]quit

[CE1]ssh user netconf authentication-type password

Info: Succeeded in adding a new SSH user.

[CE1]ssh user netconf service-type snetconf

[CE1]snetconf server enable

Info: Succeeded in starting the SNETCONF server on SSH port 22.

[CE1]netconf

[CE1-netconf]protocol inbound ssh port 830

Info: Succeeded in starting the ssh port 830 service.

[CE1-netconf]quit

[CE1]



进程已结束,退出代码0

登陆CE1查看loopback0接口配置

[CE1]interface  LoopBack 0

[CE1-LoopBack0]dis this



interface LoopBack0

 description Config by NETCONF

 ip address 1.1.1.1 255.255.255.255

代码解析:

  1. 在pycharm的本项目的python文件的同一目录下创建txt文档,用于配置netconf服务。

配置文件如下:

system-view immediately

aaa

local-user netconf password irreversible-cipher Huawei@123

local-user netconf service-type ssh

local-user netconf level 3

quit

ssh user netconf authentication-type password

ssh user netconf service-type snetconf

snetconf server enable

netconf

protocol inbound ssh port 830

quit

  1. 导入库
from paramiko import  SSHClient,AutoAddPolicy

from ncclient import manager

from ncclient import operations

from time import  sleep

导入paramiko用于SSH远程登陆设备进行配置,导入ncclinet用于netconf的连接和配置。

  1. 定义变量
service_ip = '172.16.1.2'

ssh_user = 'python'

ssh_pass = 'Huawei@123'

netconf_user = 'netconf'

netconf_pass = 'Huawei@123'

port = '830'

将需要登陆设备的ip地址,ssh登陆用户名、密码以及netconf的用户名和密码定义为变量。

(4)构建XML配置文件

XMLS = '''<config>

      <ethernet xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">

        <ethernetIfs>

          <ethernetIf operation="merge">

            <ifName>GE1/0/2</ifName>

            <l2Enable>disable</l2Enable>

          </ethernetIf>

        </ethernetIfs>

      </ethernet>

      <ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">

        <interfaces>

          <interface operation="merge">

            <ifName>Loopback0</ifName>

            <ifDescr>Config by NETCONF</ifDescr>

            <ifmAm4>

              <am4CfgAddrs>

                <am4CfgAddr operation="create">

                  <subnetMask>255.255.255.255</subnetMask>

                  <addrType>main</addrType>

                  <ifIpAddr>1.1.1.1</ifIpAddr>

                </am4CfgAddr>

              </am4CfgAddrs>

            </ifmAm4>

          </interface>

        </interfaces>

      </ifm>

    </config>'''

NETCONF通过XML文件传递配置信息。XML是一种非常常用的文本格式,可以<>不断嵌套展开数据。完整的NETCONF会话有传输层、消息层、操作层和内容层。在当前XML配置文件中传递的仅包含操作层和内容层。

本例中的XML文件意为将接口loopback 0接口IP地址改为1.1.1.1/32。

(5)定义构造函数

class datacom():

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

        self.ip = ip

        self.username = username

        self.password = password

        self.ssh = self.ssh_connect()

(6)定义def 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

(7)定义def ssh_config():方法,用于登陆设备,进行配置

  

  def ssh_config(self):

        shell = self.ssh.invoke_shell()

        shell.send('n\n')

        f = open("config_netconf.txt")

        cmd = f.readlines()

        for i in cmd:

            shell.send(i)

            sleep(2)



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

        print(dis_this)

        self.ssh.close()

f = open("config_netconf.txt")代表打开文件config_netconf.txt;

cmd = f.readlines() 代表对config_netconf.txt这个文件内容进行逐行的读取;

 for i in cmd:

    shell.send(i)

            sleep(2)

代表定义一个循环语句,将config_netconf.txt的内容输入在设备的命令行,即配置设备的netconf服务。

(8)定义netconf_connect():方法,用于建立netconf连接

def netconf_connect(host, port, user, password):

    return manager.connect(host=host,

                       port=port,

                       username=user,

                       password=password,

                       hostkey_verify = False,

                       device_params={'name': "huawei"},

                       allow_agent = False,

                       look_for_keys = False)

定义函数netconf_connect(host, port, user, password)。函数输入四个参数为NETCONF主机的IP、端口、NETCONF用户名和密码。函数返回ncclient的manager.connect的方法。

manager.connect的作用是建立netconf连接。

(9)运行主函数

if __name__ == '__main__':

    joinlabs = datacom(service_ip,ssh_user,ssh_pass)

    joinlabs.ssh_config()

    netconf = netconf_connect(service_ip,port,netconf_user,netconf_pass)

    netconf.edit_config(target='running',config=XMLS)

首先执行joinlabs.ssh_config(),即调用datacom()这个类下的ssh_config这个方法。并且输入ssh登陆的ip、用户名及密码。

然后再执行netconf = netconf_connect(service_ip,port,netconf_user,netconf_pass)赋值为netconf,输入netconf的参数,建立netconf连接。

最后执行netconf.edit_config(target='running',config=XMLS),将在变量中定义的XMLS这个文件通过edit_config这个方法发生到设备的running配置文件。

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

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

相关文章

Redis应用-缓存

目录 什么是缓存 使用redis作为缓存 缓存的更新策略 通用的淘汰策略 redis内置的淘汰策略 缓存预热 缓存穿透 缓存雪崩 缓存击穿 什么是缓存 缓存(cache)是计算机中一个经典的概念,在很多的场景中都会涉及到. 核心思路就是把一些常用的数据放到触手可及(访问速度更快…

docker安装及配置mysql

docker 安装mysql 下载镜像文件 下载mysql5.7版本 sudo docker pull mysql:5.7检查是否下载成功 sudo docker images2.创建实例并启动 切换到root下避免每次使用sudo 密码&#xff1a;vagrant docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/my…

ChatGPT能帮助--掌握各种AI绘图工具,随意生成各类型性图像

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

专业130+总分400+云南大学通信847专业基础综考研经验(原专业课827)

今年专业130总分400云南大学通信上岸&#xff0c;整体考研感觉还是比较满意&#xff0c;期间也付出了很多心血&#xff0c;走过弯路&#xff0c;下面分享一下这一年考研得失&#xff0c;希望大家可以从中有所借鉴。 先说明我在考研报名前更换成云南大学的理由&#xff1a;&…

HarmonyOS4.0从零开始的开发教程03初识ArkTS开发语言(中)

HarmonyOS&#xff08;二&#xff09;初识ArkTS开发语言&#xff08;中&#xff09;之TypeScript入门 浅析ArkTS的起源和演进 1 引言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;Huawei进一步推出了ArkTS。 从最初的基础的逻辑交互能力&#xff0c;到具备类…

使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB

本文介绍从AWS DynamoDB到阿里云MongoDB的迁移框架。 它概述了以下步骤&#xff1a; 在阿里云上配置云数据库MongoDB版并应用公网终端节点在 AWS EC2 上安装 Nimoshake将AWS EC2访问阿里云MongoDB版列入白名单配置 Nimoshake 并开始迁移过程验证目标数据库上的增量数据 1. 创…

阿里云上传文件出现的问题解决(跨域设置)

跨域设置引起的问题 起因&#xff1a;开通对象存储服务后&#xff0c;上传文件限制在5M 大小&#xff0c;无法上传大文件。 1.查看报错信息 2.分析阿里云服务端响应内容 <?xml version"1.0" encoding"UTF-8"?> <Error><Code>Invali…

计算机图形图像技术(图像锐化处理与图像解析)

一、实验原理&#xff1a; 1、拓展Sobel算子锐化 void Sobel(Array src, Array dst, int ddepth, int dx, int dy, int ksize); ①参数&#xff1a;src为输入图像&#xff1b;dst为输出图像&#xff0c;大小和通道数与源图像一致&#xff0c;必要时重建&#xff1b;ddepth为目…

【动手学深度学习】(十一)卷积层

文章目录 一、从全连接到卷积 一、从全连接到卷积 分类猫和狗的图片 使用一个相机采集图片&#xff08;12M像素&#xff09;RGB图片有36M元素使用100大小的单隐层MLP&#xff0c;模型有3.6B元素 远多于世界上所有猫和狗总数&#xff08;900M狗&#xff0c;600M猫&#xff09;…

KD-Tree

游戏中常对物体进行空间划分&#xff0c;对于均匀分布的划分一般用四叉树(八叉树)&#xff0c;动态不均匀的分布可以采用kd-tree 构建kd-tree 构建思路&#xff1a; 1.对节点进行各维度的方差分析&#xff0c;选取方差最大(即离散程度最高)的维度进行排序。取中值节点作为分…

ThreadX开源助力Microsoft扩大应用范围:对比亚马逊AWS的策略差异

全球超过120亿台设备正在运行ThreadX&#xff0c;这是一款专为资源受限环境设计的实时操作系统。该操作系统在微控制器和小型处理器上表现出色&#xff0c;以极高的可靠性和精确的时间控制处理任务而闻名。 ThreadX曾是英特尔芯片管理引擎的引擎&#xff0c;并且是控制Raspber…

运行第一个php及html程序

运行第一个php程序 打开vscode&#xff0c;打开文件夹&#xff0c;找到wampserver的安装目录中的www文件夹新建文件。 html文件直接复制路径到浏览器即可运行 php文件复制路径到浏览器后更改www及之前的路径为localhost

Linux系统调试课:I2C tools调试工具

文章目录 一、如何使用I2C tools测试I2C外设1、I2C tools概述: 2、下载I2C tools源码:3、编译I2C tools源码: 4、i2cdetect 5、i2cget 6、i2cdump

STM32单片机项目实例:基于TouchGFX的智能手表设计(3)嵌入式程序任务调度的设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;3&#xff09;嵌入式程序任务调度的设计 目录 一、嵌入式程序设计 1.1轮询 1.2 前后台&#xff08;中断轮询&#xff09; 1.3 事件驱动与消息 1.3.1 事件驱动的概念 1.4 定时器触发事件驱动型的任…

7. 从零用Rust编写正反向代理, HTTP及TCP内网穿透原理及运行篇

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…

分布式光伏电站监控运维系统的简单介绍-安科瑞黄安南

摘要&#xff1a;设计了一套更高性价比&#xff0c;且容易操作的电站监控系统。该系统融合了互联网和物联网&#xff0c;并为光伏电数据的传输构建了相应的通道&#xff0c;可支持云存储等功能&#xff0c;同时也为用户提供了多元化的查询功能。 关键词&#xff1a;分布式太阳能…

P6 Linux 系统中的文件类型

目录 前言 ​编辑 01 linux系统查看文件类型 02 普通文件 - 03 目录文件 d 04 字符设备文件 c 和块设备文件 b 05 符号链接文件 l 06 管道文件 p 07 套接字文件 s 总结 前言 &#x1f3ac; 个人…

Azure Machine Learning - Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4

通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4 环境准备 Azure 订阅 - 免费创建订阅已在所需的 Azure 订阅中授予对 Azure OpenAI 服务的访问权限。 目前&#xff0c;仅应用程序授予对此服务的访问权限。 可以填写 https://aka.ms/oai/access 处的表单来申请对 Azure Op…

基于PicGo实现Typora图片自动上传GitHub

文章目录 一. 引言二. 原理三. 配置3.1 GitHub 设置3.2 下载配置 PicGo3.3 配置 Typora3.4 使用 一. 引言 Typora是一款非常好的笔记软件&#xff0c;但是有一个比较不好的地方&#xff1a;默认图片是存放在本地缓存中。这就会导致文件夹一旦被误删或电脑系统重装而忘记备份文件…

vr建筑虚拟实景展厅漫游体验更直观全面

随着科技的不断进步&#xff0c;纯三维、可交互、轻量化的三维线上展览云平台&#xff0c;打破时间界限&#xff0c;以其独特的魅力&#xff0c;给予客户更多的自主性、趣味性和真实性&#xff0c;客户哪怕在天南地北&#xff0c;通过网络、手机即可随时随地参观企业线上立体化…