网络自动化01:netmiko基础、netmiko简单demo

本系列应该是记录我在网络自动化中的学习、使用。具体更新多少期、什么频率都不太清楚。
同时本文的记录方式不会是那么的符合学习的思路,需要更加详细的内容建议阅读官方文档等。
本人学习的路径是基于九净老师NetDevOps加油站,但本文有所简化,取舍了难度较高的深入逻辑,仅保留最常用、最直观的内容。

目录

  • 什么是netmiko
    • Netmiko和Paramiko
  • 安装netmiko
  • 环境
  • 最简单的Netmiko Demo脚本
    • 针对上述代码所用到的类的介绍
      • 1. 设备信息取值
  • 推荐使用的场景
  • 写在最后

什么是netmiko

网络设备的配置,我们一般都是采用CLI的方式,通过Console、Telnet、SSH登录到设备,然后执行需要的命令。

一般来说网络自动化的底层逻辑分为两种:

  • 让机器以机器的方式完成操作(一般用API)
  • 让机器模拟人的方式完成操作

以目前的设备来说,支持API、同时有比较完善生态的网络设备不多,同时价格比较昂贵(我个人认为可以类比支持SDN的设备)。
所以选用让机器模拟人的方式完成操作这个方案是在网络自动化中比较常见的。实际上,这就是让我们的脚本通过远程登陆(SSH、Telnet)等方式登陆到设备,然后发送命令即可。

Python基于CLI模式与网络设备进行交互的工具包有很多,而netmikoparamiko无疑是这类库中最有名的。

Netmiko和Paramiko

netmiko是工程师Kirk Byers 于2015年发布的一个用于简化众多厂商网络设备CLI连接(ssh、telnet、serial)的工具类。实际2015年的版本只支持ssh,所以它最早是为了简化ssh通用工具类paramiko的连接和操作(后续netmiko已经支持了telnet和serial),所以它的名字从中取了"miko",又因其垂直于网络自动化领域,所以又添加了“net”,组成了netmiko的名称。

相较paramiko,netmiko有着更加简化的操作和更加针对网络设备的高阶封装。通过抽象一些底层的状态控制,消除查看配置和改变配置的在一众平台中的差异,目前支持的厂商平台覆盖了日常网络运维所需,所以更建议新手使用netmiko,让我们更聚焦在网络业务逻辑层面,这些我们也会在后续的使用中都将体会到。

安装netmiko

前置的Python安装流程不再赘述,需要的请通过别的笔记自行学习安装
我的环境是Python 3.9Pycharm 2024.2Windows11

# 安装netmiko
pip install netmiko

以上执行成功后,即安装完成了netmiko。

我们打开一个交互式的窗口,或者编写一个脚本,导入netmiko的对应函数没有报错,代表安装成功。

from netmiko import Netmiko

环境

我使用EVE-NG部署的Cisco与Huawei设备混合的简单网络,拓扑图如下:
在这里插入图片描述
所有设备直接通过Net云朵桥接到VMnet8网卡,均设置VMnet8网段中的可用地址。
所有设备均以提前配置好了ssh,用户名python,密码123。
所有设备均已ssh测试确定可以通过ssh登录。

最简单的Netmiko Demo脚本

先通过一个查看接口ip信息的脚本,为大家带入网络自动化。

# 导入库
from netmiko import ConnectHandler# 设备信息
sw1 = {'device_type':'cisco_ios','ip':'192.168.100.11','username':'python','password':'123'
}# 使用netmiko
with ConnectHandler(**sw1) as conn:# 如果设备需要进入enable模式,需要输入# 如果默认就是enable模式,或者设备没有enable模式,不会报错conn.enable()# 发送show ip int bri 命令,并将回显保存到output中output = conn.send_command(command_string='show ip int bri')# 输出output保存的内容,即show ip int bri的回显print(output)

以上就是最简单的一个netmiko实现网络自动化的方式。或许会说设备太少、命令太简单,但实际上,网络自动化的逻辑就是这样的:

  1. 记录所需设备信息
  2. 调用netmiko的ConnectHandler方法,使用设备信息中的ip、username、password创建ssh隧道
  3. 调用send_command方法发送需要发送的命令(一般是show命令) 或者调用send_config_set方法发送需要发送的命令(一般是配置命令)
  4. 关闭ssh隧道(上述代码通过with方法,不必使用disconnect方法手动关闭)
  5. 根据需求打印、记录、处理、收集回显信息
  6. 结束脚本

在上述代码中,值得注意的一点是:netmiko为我们处理好了不同厂商的命令集区别,即通过设备信息的device_type指定驱动类,后续的进入配置模式究竟是conf t还是system-v,最终保存配置的wri mem还是save就是脚本自行处理,而无需人工思考处理。

设备信息需要以字典dict保存(什么是字典这个问题,请先掌握好python基础),其中ip或hostdevice_typeusernamepassword字段是必须有,且不能打错。因为netmiko是根据这些字段创建与设备通信的ssh隧道。iphost只需要有一个就可以,如果都有的话,默认采用ip

针对上述代码所用到的类的介绍

这里涉及到更多的python基础,个人认为如果只是用到如上代码的内容的话,其实不需要了解太多。

1. 设备信息取值

上文有提到,netmiko的ConnectHandler方法通过设备信息中的部分字段创建ssh隧道。所以设备信息变量中可以用的值是根据这个方法的参数量确定的。
而这个ConnectHandler方法,又是继承于BaseConnection
这个类就是netmiko的所有连接类的基类(可以理解为这个netmiko连接家族的老祖宗),它的构造方法中有着众多的参数,用于去创建一个连接对象,即登录到一台设备。

# 内容太多,仅截取构造函数部分
class BaseConnection:"""Defines vendor independent methods.Otherwise method left as a stub method."""def __init__(self,ip: str = "",host: str = "",username: str = "",password: Optional[str] = None,secret: str = "",port: Optional[int] = None,device_type: str = "",verbose: bool = False,global_delay_factor: float = 1.0,global_cmd_verify: Optional[bool] = None,use_keys: bool = False,key_file: Optional[str] = None,pkey: Optional[paramiko.PKey] = None,passphrase: Optional[str] = None,disabled_algorithms: Optional[Dict[str, Any]] = None,disable_sha2_fix: bool = False,allow_agent: bool = False,ssh_strict: bool = False,system_host_keys: bool = False,alt_host_keys: bool = False,alt_key_file: str = "",ssh_config_file: Optional[str] = None,## Connect timeouts# ssh-connect --> TCP conn (conn_timeout) --> SSH-banner (banner_timeout)#       --> Auth response (auth_timeout)conn_timeout: int = 10,# Timeout to wait for authentication responseauth_timeout: Optional[int] = None,banner_timeout: int = 15,  # Timeout to wait for the banner to be presented# Other timeoutsblocking_timeout: int = 20,  # Read blocking timeouttimeout: int = 100,  # TCP connect timeout | overloaded to read-loop timeoutsession_timeout: int = 60,  # Used for locking/sharing the connectionread_timeout_override: Optional[float] = None,keepalive: int = 0,default_enter: Optional[str] = None,response_return: Optional[str] = None,serial_settings: Optional[Dict[str, Any]] = None,fast_cli: bool = True,_legacy_mode: bool = False,session_log: Optional[SessionLog] = None,session_log_record_writes: bool = False,session_log_file_mode: str = "write",allow_auto_change: bool = False,encoding: str = "utf-8",sock: Optional[socket.socket] = None,sock_telnet: Optional[Dict[str, Any]] = None,auto_connect: bool = True,delay_factor_compat: bool = False,disable_lf_normalization: bool = False,) -> None:...
......
........

以下是比较重要的部分参数的解释:

说明参数名
ip设备IP地址
host设备host名称,需要可以解析出IP地址
username用户名
password密码
secretenable密码,提权时需要输入的密码
port端口,会根据device_type自动判断(如有“ssh”字符串是22,如有“telnet”是23),也可以用户指定
device_type设备的驱动名称
conn_timeout连接超时时间,默认为5秒,如果网络条件不好,建议适当增加,尤其是广域网或者国际网络(在show配置,经常使用)
timeout执行命令的超时时间,根据情况适当延长,默认为100秒
session_log记录log的路径,如填写则会将与设备的所有操作记录(但可能和脚本内部分内容冲突,建议只有在检查脚本问题时或运行脚本留样时少量使用)
session_log_file_mode记录log的模式,覆盖"write" ,追加 “append”,默认覆盖
global_delay_factor默认的全局的延迟因子,值为1,结合后续篇章了解,在这里引出,在某些场景需要它参与计算,但是一般不修改。
fast_cli快速模式,默认False,不开启,netmiko内部提供一种优化性能的方式,设置为True后,在与设备交互过程中读取隧道中信息的频率会加快(全局延迟因子与单个方法中的延迟因子取较小值)。

推荐使用的场景

首先,我个人认为,在使用这种方式的自动化运维时,它就已经继承了人的不确定性,所以极力不推荐使用netmiko用在下发配置的场景上。
反而,使用netmiko批量获取信息,这个场景,我认为是netmiko最有用,也是对我们来说风险最低的使用方式。

写在最后

这篇文章主要就记录了最简单netmiko demo,以及netmiko一些简介。
主要是怕自己学了就忘了,所以还是根据自己想到哪写到哪的思路记下了这篇内容。
对于netmiko,实际上如上就是最常用的操作。我个人认为,对于在收集信息场景中,继续使用python对信息进行处理这个操作才是网路自动化真正的难点。
同样的,由于网络自动化这个场景过于小众,初级网络工程师觉得没必要,开发人员又觉得代码通用性较低,基本都是根据需求进行简单的脚本开发。只有设备量级达到一个程度,网络自动化才真实有效。
目前也只是我刚出学最浅显的理解,如有未来的改变或大家的争论,本人都非常欢迎。

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

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

相关文章

一篇文章理解CSS垂直布局方法

方法1&#xff1a;align-content: center 在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpo…

上海亚商投顾:沪指缩量调整 华为概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整&#xff0c;沪指、深成指午后跌超1%&#xff0c;创业板指一度跌逾2%&#xff0c;尾盘跌幅有…

近百万奖金!2024 Web3.0 创新大赛重磅来袭!

10月30日&#xff0c;中国互联网协会与香港Web3.0协会共同组织举办的2024 Web3.0 创新大赛在上海举行启动会&#xff0c;宣布大赛正式在DataFountain竞赛平台&#xff08;简称DF平台&#xff0c;http://www.datafountain.cn&#xff09;启动上线。 大赛面向社会各界征集参赛团队…

Github 2024-11-01 开源项目月报 Top19

根据Github Trendings的统计,本月(2024-11-01统计)共有19个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目9TypeScript项目3JavaScript项目3Svelte项目1Jupyter Notebook项目1Ruby项目1HTML项目1Rust项目1Java项目1C++项目1Go项目1Python中的…

操作系统实验记录

实验零:虚拟机安装 一、安装vmware虚拟机 与vmware匹配搜索结果 - 考拉软件 (rjctx.com),下载17.5.1版本即可下载后对照教程安装 二、下载iso虚拟驱动 搜索清华大学镜像网站,点击再搜ubuntu,下载这个4.1GB的iso文件安装后打开vmware虚拟机 三、配置vmware虚拟机 右键管…

五层塔灯——智能仓储的守护者

在繁忙的现代仓库中&#xff0c;每一寸空间都承载着货物的流转与信息的传递。然而&#xff0c;传统仓库管理常常面临着效率低下、错误频发的问题。正是在这样的背景下&#xff0c;一款名为“五层塔灯”的创新产品应运而生&#xff0c;它以其独特的设计理念和卓越的性能&#xf…

开通商家转账到零钱提交注意事项

商家转账到零钱是微信支付提供的一项功能&#xff0c;允许商家将资金直接转入用户的微信零钱账户。不过目前该接口的申请目前采用人工审核&#xff0c;对商家提交的材料设置了比较高的门槛导致很多商家的申请屡次被驳回&#xff0c;这边文章总结了我们数千次成功申请的经验以帮…

【环境风险评估、风力发电、城市街道排放、生态气象等领域】WRF-LES与PALM微尺度气象大涡模拟

PALM和WRF-LES主要应用于微尺度气象学领域&#xff0c;具体包括以下几个方面&#xff1a; 城市和复杂地形环境中的流场模拟&#xff1a;PALM特别适用于城市和复杂地形环境中的流场模拟。这类模拟对于理解城市热岛效应、污染物扩散、城市通风等城市气象问题至关重要。 边界层动…

【Web前端】JavaScript 对象原型与继承机制

JavaScript 是一种动态类型的编程语言&#xff0c;其核心特性之一就是对象和原型链。理解原型及其工作机制对于掌握 JavaScript 的继承和对象关系非常重要。 什么是原型 每个对象都有一个内部属性 ​​[[Prototype]]​​​&#xff0c;这个属性指向创建该对象的构造函数的原型…

[java][基础]HTTPTomcatServlet

1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xff0c;这些网站统称为Web网站。如下就是通…

模型 康威定律(沟通VS技术架构)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。组织结构塑造系统架构。 1 康威定律的应用 1.1 某金融科技公司支付系统的微服务架构 某金融科技公司的支付系统采用微服务架构&#xff0c;团队按照功能模块划分为支付网关团队、账户管理团队、风控…

【Python】【数据可视化】【商务智能方法与应用】课程 作业一 飞桨AI Studio

作业说明 程序运行和题目图形相同可得90分&#xff0c;图形显示有所变化&#xff0c;美观清晰可适当加分。 import matplotlib.pyplot as plt import numpy as npx np.linspace(0, 1, 100) y1 x**2 y2 x**4plt.figure(figsize(8, 6))# yx^2 plt.plot(x, y1, -., labelyx^2,…

江协科技STM32学习- P28 USART串口数据包

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

浅谈QT中Tab键的切换逻辑

浅谈QT中Tab键的切换逻辑 无意中发现在输入界面中按下Tab键时&#xff0c;没有按照预想的顺序切换焦点事件&#xff0c;如下图所示 这个现象还是很有趣&#xff0c;仔细观察了下&#xff0c;默认的切换顺序是按照控件拖入顺序&#xff0c;那么知道了这个问题想要解决起来就很简…

浅谈:中小企业如何实现数字化转型

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 在当今数字化浪潮的冲击下&#xff0c;数字化转型已成为企业发展的必然趋势。对于中小企业而言&#xff0c;实现数字化转型并非易事&#xff0c;但也并非遥不可及。…

Conmi的正确答案——在Kibana中搜索Elasticsearch的索引

Elasticsearch版本&#xff1a;7.17.25 Kibana版本&#xff1a;7.17.25 0、进入首页 1、点击空间名“默”&#xff08;我的默认空间名就是“默认”&#xff09;&#xff1b; 2、点击气泡弹窗的“管理空间”进入管理页面&#xff1b; 3、点击“索引模式”&#xff0c;进入索引模…

AI时代的产品经理修炼手册:《人工智能产品经理》

内容简介&#xff1a;《人工智能产品经理&#xff1a;AI时代PM修炼手册》是一本专为AI时代产品经理编写的实用手册。作者张竞宇&#xff0c;凭借其在科大讯飞和阿里云的丰富经验&#xff0c;从人工智能产品的特殊性、产品经理的价值定位、技术理解等方面&#xff0c;全面阐述了…

11月3日笔记(根据凭据提权)

用户凭据操作 枚举 Unattended 凭据 无人值守(Unattended)安装允许应用程序在不需要管理员关注下自动安装。无人值守安装的问题是会在系统中残留一些配置文件&#xff0c;其中可能包含本地管理员的用户名和密码&#xff0c;常见的路径如下。 C:\sysprep.inf C:\syspreg\sysp…

Linux·进程控制(system V)

1. 共享内存 system V共享内存是最快的IPC形式&#xff0c;之前的管道是基于Linux内核开发的通讯方案&#xff0c;其读写接口都是现成的&#xff0c;因此内核设计者为了完成进程间通讯任务并不需要新增太多代码。而共享内存属于system V标准&#xff0c;是操作系统单独…

[JAVAEE] 面试题(二) - CAS 和 原子类

目录 一. CAS的实现原理 1.1 伪代码分析 1.2 底层实现 二. CAS 操作示例 三. ABA问题 四. 原子类 4.1 使用原子类的目的 4.2 原子类的使用示例 五. 总结 一. CAS的实现原理 CAS(compare and swap 比较和交换)是一种用于实现无锁并发的技术. 1.1 伪代码分析 // 伪代…