使用netconf配置华为设备

news2024/11/25 21:46:55

实验目的:

公司有一台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/1267625.html

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

相关文章

unity程序中的根目录

在unity程序中如果要解析或保存文件时&#xff0c;其根目录为工程名的下一级目录&#xff0c;也就是Assets同级的目标

【数据结构】- 详解线索二叉树(C 语言实现)

目录 一、线索二叉树的基本概念 二、构造线索二叉树 三、遍历线索二叉树 一、线索二叉树的基本概念 遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列&#xff0c;得到二叉树中结点的先序序列、中序序列或后序序列。这实质上是对一个非线性结构进行线性化操作&am…

【同一局域网下】两台电脑之间互ping

两台电脑互ping 首先需要连接同一网咯关闭需要ping的电脑的防火墙 关闭防火墙步骤&#xff08;以win11系统为例&#xff09;&#xff1a; 设置 --> 隐私和安全性 --> Windows 安全中心 打开Windows安全中心 防火墙和网络保护 --> 选择正在使用的网络 关闭 ping其他…

Unity 轨道展示系统(DollyMotion)

DollyMotion &#x1f371;功能展示&#x1f959;使用&#x1f4a1;设置路径点&#x1f4a1;触发点位切换&#x1f4a1;动态更新路径点&#x1f4a1;事件触发&#x1f4a1;设置路径&#x1f4a1;设置移动方案固定速度方向最近路径方向 &#x1f4a1;设置移动速度曲线 传送门 &a…

厦门城市内涝积水预防方案

随着城市化进程的加速&#xff0c;城市内涝问题日益凸显&#xff0c;给人们的生命财产安全带来了严重威胁。为了解决这一问题&#xff0c;城市内涝积水监测系统的应用逐渐受到广泛关注。本文将探讨城市内涝积水监测系统的优点及作用&#xff0c;为保障城市生命线的安全提供有力…

无电机光电测径仪稳定性好

目前市面上的在线测径仪主要是有电机的激光扫描式测径仪与无电机的光电平行光测径仪。均能完成外径尺寸的高精度尺寸检测&#xff0c;本文来简单介绍一下无电机光电测径仪的优势。 光电测径仪检测原理 发射镜头内置一个点光源&#xff0c;点光源发出的光通过透镜系统&#xf…

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日&#xff0c;由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选&#xff0c;充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…

智慧环保:视频监控平台EasyCVR与AI智能分析在环保领域的应用

人工智能&#xff08;AI&#xff09;视频分析技术在环保领域有着广泛的应用&#xff0c;通过智能识别和跟踪技术&#xff0c;AI视频分析可以实时监测空气质量、水质和噪音等环境指标&#xff0c;帮助环保部门及时发现污染源并进行有效治理&#xff0c;提高监测、管理和保护环境…

蓝桥杯第一天-----时间显示

文章目录 前言一、题目描述二、测试用例三、题目分析四、具体代码实现总结 前言 本章中将相信介绍蓝桥杯中关于时间显示的题目。 链接&#xff1a;https://www.lanqiao.cn/problems/1452/learning/ 一、题目描述 二、测试用例 三、题目分析 1.输入的时间为毫秒&#xff0c;毫…

结构体数组和结构体指针

在按键中断中&#xff0c;使用了结构体数组的语法&#xff1a; struct irq_dev imx6uirq; /* key设备 *///提取出GPIO对应的编号for (i 0; i < KEY_NUM; i) {imx6uirq.irqkeydesc[i].gpio of_get_named_gpio(imx6uirq.nd,"key-gpios", i);if (imx6uirq.irq…

十大排序算法及其特性最全总结,以408考察特性为基准

文章目录 一、冒泡排序&#xff08;Bubble Sort&#xff09;1.基本思想2.动图演示3.算法描述4.代码实现 二、快速排序&#xff08;Quick Sort&#xff09;☆1.基本思想2.动图演示3.算法描述4.代码实现 三、选择排序&#xff08;Selection Sort&#xff09;1.基本思想2.动图演示…

Linux创建与编辑视图

本博客将会详细讲解如何在Linux中如何编辑配置文件 输出重定向 对于一台设备而言&#xff0c;存在着两种设备&#xff0c;分别负责输入与输出&#xff1a; 显示器&#xff08;输出设备>&#xff09; 与 键盘&#xff08;输入设备<&#xff09; 对于Linux系统而言&#…

数据结构算法-分支定界算法

引言 应该记得这一张图片&#xff0c;在A星算法里面说过 那么现在说的是换一种方式实现 如何实现&#xff1f; 之前不撞南墙不回头的方法-深度优先搜索 的方式 广度优先搜索方式 广度优先搜索&#xff1a;就是说按照顺序入队 并且搜索扩展节点 探测四面八方&#xff0c;如此循环…

【c语言:常用字符串函数与内存函数的使用与实现】

文章目录 1. strlen函数1.1使用1.2模拟实现 2.strcmp函数2.1使用2.2模拟实现 3.strncmp函数3.1使用3.2模拟实现 4.strcpy函数4.1 使用4.2模拟实现 5.strcncpy5.1使用5.2模拟实现 6.strcat函数6.1使用6.2模拟实现 7.strncat函数7.1使用7.2模拟实现 8.strstr函数8.1使用8.2模拟实…

com.mongodb.MongoSocketOpenException: Exception opening socket

估计mongodb数据库没开启&#xff0c;或者链接错误了&#xff0c;谁又改了&#xff0c;唉 2023-11-29 16:19:45.818 INFO 39552 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017…

【JavaScript】3.3 JavaScript工具和库

文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中&#xff0c;会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码&#xff0c;提高工作效率。在本章节中&#xff0c;我们将探讨一些常见的 JavaScript 工具和库&…

001 - 安装Qt并配置环境

进入Qt中文网站的下载界面 &#x1f449;点此进入 点进去之后&#xff0c;你会看到如下界面&#xff1a; 这里下载的是Qt开源版的在线安装器&#xff0c; 如果你觉得下载速度很慢&#xff0c;可以挂个梯子。双击打开&#xff1a; 因为是在线安装&#xff0c;所以你需要输入电子…

4_最长公共前缀

我首先想到的方法就是暴力匹配法&#xff0c;刚开始我自己写的代码长这样&#xff0c;运行结果是错误的 。发现是循环的控制变量不对&#xff0c;导致计算结果出错。应该比较所有的vec[i][0]&#xff0c;vec[i][1]......&#xff0c;而不是比较vec[0][j]&#xff0c;vec[1][j].…

科研绘图配色

01 配色的基本原则 颜色需要有自身的意义。不同的颜色表示不同的分组&#xff0c;相近的颜色表示同一个分组&#xff1b;配色需要展现数据逻辑关系&#xff0c;突出关键数据&#xff0c;比如重要的数据用深色或暖色表示&#xff0c;不重要的数据用浅色或冷色表示。 色彩种类两…

通达OA inc/package/down.php接口未授权访问漏洞复现 [附POC]

文章目录 通达OA inc/package/down.php接口未授权访问漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 通达OA inc/package/down.php接口未授权访问漏洞复现 [附POC] 0x01 前言 免责声明&#x…