每天你是否还仍旧在以手动这种方式SSH登录几十台设备, 一条一条、逐个逐个地去敲命令? 熬夜进行巡检的活动, 对配置进行批量修改, 只要手抖那么一下, 就都得重新再来一次。正好有个兄弟!他就是个例子, 上周的时候他向我吐槽, 为怎么样去改三百台交换机的VLAN, 加班到凌晨三点钟, 结果有一台给遗漏了, 最终导致全网出现广播风暴的状况。实际上,对于这事情早就存在那种如同“自动挡”一样的方案了。你只需费时三小时去配置好脚本, 往后每周的该项工作可在三分钟内就完成收工的操作。

Netmiko Python自动化网络配置_批量管理设备SSH登录_Python netmiko

我刚开始进入这个行业的时候也会用到的那一个, 是那种需要自己去编写time.sleep()、手动添加换行符的库。每连接一台设备都必须去猜测提示符, 发送完命令之后还得计算着时间等着回显, 就跟开手动挡汽车一样让人觉得疲惫。后来发现了这么个情况, 它把这些麻烦事全部包揽了下来: 自动进行检测提示符、自动进入配置模式、自动退出。简单来讲, 就是能够让你从会处理复杂问题却要亲自动手处理各种琐事的人, 也就是所谓在各种细节上都要操心的“修车工”角色, 转变成为只需简单操作, 如同踩油门那般轻松的相对轻松的“驾驶员”角色。

Netmiko Python自动化网络配置_批量管理设备SSH登录_Python netmiko

装起来同样不复杂, 通过 pip 操作便可, 要记得借助虚拟环境将依赖隔离开, 其背后所依赖的这些内容, 安装完成后运行一下以确认版本, 连接设备的核心函数称作, 你仅仅需要告知它设备类型、IP、用户名以及密码, 设备类型要怎样去查询呢? 使用。

..,列表里几百种厂商,华为、思科、H3C全都有。

Python netmiko_批量管理设备SSH登录_Netmiko Python自动化网络配置

举个例子,连一台华为设备:

```

from

= {

'': '',

“host”, 其值为“192.168.1.1”。

'': 'admin',

'': ''

with (**) as conn:

= conn.(' ')

print()

```

瞧见了没, with语句会自行将连接关闭, 无需手动去执行close操作。直接等待设备进行回显, 而不必借助sleep命令。这便是它所蕴含的哲理,即你仅仅操心要发送哪条命令, 至于如何让其自行处理好相关事宜。

Python netmiko_批量管理设备SSH登录_Netmiko Python自动化网络配置

要将四大核心命令函数彻底领会透彻;其中最为常用的那个是这样的, 它用于发送查询命令, 进而返回字符串;它存在一个参数, 假设你明确知晓设备会输出“--- More ---”, 那么就可令其等待出现这个字符串后再继续执行相应操作, 以此来防止回显出现被截断的情况;在处理超长回显的时候不要使用这个函数, 而是改换使用另一个函数, 那个函数是依靠固定延时来进行操作的, 虽说其稳定性欠佳但却适用于大段字符的输出。

用以推送配置的是(), 它凭借此会自行进入, 在发送完毕后又得以自动退出。与列表相协同能够紧接着变更多条配置呢。更为高级的是e()这一形态, 首先你应把此项配置精心填制成为文本文件, 每一行仅设置一条命令, 随后径直推送过去。需留意华为设备在某些时候是需要增添超时参数的, 这是鉴于部分命令的执行速度较为迟缓。

Netmiko Python自动化网络配置_Python netmiko_批量管理设备SSH登录

批量管理多个设备乃是网工的必然需求。最为简便的办法: 将IP书写于txt文件之中, 进行循环读取, 针对每一台设备建立字典并连接一次。然而不同设备的密码存在差异该如何处理呢? 运用JSON文件存储结构数据, 例如:

Python netmiko_Netmiko Python自动化网络配置_批量管理设备SSH登录

```json

"name": "核心1",

"": {

"": "",

"host": "10.0.0.1",

"": "admin",

"": ""

```

Netmiko Python自动化网络配置_Python netmiko_批量管理设备SSH登录

接着, 通过json.load()将其读入, 以动态的方式获取参数, 这样子增加一台设备时,只需修改JSON部分, 而无需对代码做出更改。

Netmiko Python自动化网络配置_Python netmiko_批量管理设备SSH登录

要是进行批量运行, 那么就容易出现问题, 此时你必须添加异常捕获, 将失败的设备记录到日志文件当中, 然后编写一个重试循环, 最多尝试3次, 每次间隔递增。倘若想要速度快点, 那就使用.来搞并发, 不过不要超过20台, 不然设备会承受不住。

Netmiko Python自动化网络配置_批量管理设备SSH登录_Python netmiko

一拿到命令回显, 面对那一堆文本, 要如何将其转变为结构化数据呢? 若自带解析功能, 添加个参数等于真即加个参数=True时, 返回的便是列表字典, 诸如刚好已全部分拆好的接口状态、IP地址等。其前提是安装了该功能, 且里面已然存有华为、思科等主流厂商的模板。要是想进行自定义, 那就写个文件, 放置到指定分区也就是/目录下, 其规则是较为简单的, 依据已有示例照着改写便可成功实现。

Python netmiko_批量管理设备SSH登录_Netmiko Python自动化网络配置

解析能力更强的是Genie/pyATS, 然而Genie仅支持Linux, 用户可用WSL2或者运行, 要是实在不想折腾, 那就加上自己写的过滤, 同样能够提取接口状态、错误计数, 拿到解析后的JSON, 你便能够去写自动化决策了诸如发现某个接口处于down态, 自动发送邮件告警, 又或者调用另一个脚本进行修复。

Netmiko Python自动化网络配置_批量管理设备SSH登录_Python netmiko

配置模板这一方面, +乃是绝佳组合。你去撰写一个模板文件, 于其中运用变量、for循环、if判断, 随后将其渲染成不同设备的配置。比如说ACL模板, 依据设备类型动态生成华为或者思科的命令, 并对其精心雕琢, 使其臻于完美。模板文件放置于目录之中。再通过特定方式进行加载。渲染完成之后直接运用e()予以推送, 从而省去手动书写每条命令的繁杂困扰。

Python netmiko_Netmiko Python自动化网络配置_批量管理设备SSH登录

要是碰到了存在交互需求的命令该如何处理呢, 就好比是删除文件这种情况, 还有重启设备这种场景之类的, 运用()去协同达成多步的交互操作, 先是发送出命令并等候提示信息出现, 接着还要发送确认字符才行, 华为设备并不具备()这种方式, 那就得去模拟su提权操作, 借助发送“su”且跟随用户名密码来达成这一目的, 需要留意的是新版本华为已经对这个操作进行了弱化处理, 不过老设备或许依旧是需要它的。

批量管理设备SSH登录_Netmiko Python自动化网络配置_Python netmiko

在文件传输这块儿, 思科设备所能使用的函数, 其底层运行的是SCP。华为官方对此并不给予支持, 那替代的办法有用FTP的, 或者。混合的方案也是可行的: 发送配置命令, 进行文件传输。

Python netmiko_Netmiko Python自动化网络配置_批量管理设备SSH登录

倘若你发觉独自运行速度迟缓, 那么能够升级至。进行调用当作后端, 凭借配置文件实现上百台设备的管理, 并行起来执行任务。然而小规模网络直接运用便已足够, 切勿过度进行设计。

Python netmiko_Netmiko Python自动化网络配置_批量管理设备SSH登录

在生产环境当中, 安全占据首要地位。密码切勿进行硬编码, 选择使用环境变量或者加密文件来处理。倘若具备条件, 采用SSH密钥认证的方式。日志里面要始终留意过滤密码, 以此防止出现泄露的情况。关于性能优化方面: 理应将并发数控制在20以内, 对连接予以复用, 不要每一台设备都进行新建操作。在调试的时候开启.DEBUG, 查看原始发送以及接收的内容后, 排查不匹配的相关问题。

Netmiko Python自动化网络配置_批量管理设备SSH登录_Python netmiko

版本在兼容时要记得锁版本, 把它写死在.txt里, 以防升级后API出现变化, 对于订阅的Notes, 要及时知晓其中的改动。

Python netmiko_Netmiko Python自动化网络配置_批量管理设备SSH登录

说到底, 它是网络工程师的瑞士军刀, 你学完它, 用一周时间掌握它, 此后巡检自动化, 批量配置自动化, 数据采集也自动化。别再熬夜敲命令节省时间, 把省下来的时间拿去陪家人, 或者用来学点新东西。

批量管理设备SSH登录_Python netmiko_Netmiko Python自动化网络配置

话又说回来, 你当下最头疼的自动化场景是啥, 是设备的类型太多了, 还是回显的解析太过杂乱? 在评论区聊一聊, 或许下篇文章就会写你面临的那个问题。若是感觉有用处, 那就转给那个仍旧在进行手动配置的同事。

Python netmiko_批量管理设备SSH登录_Netmiko Python自动化网络配置

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐