的设备管理自动化)
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载导读本文是 90DaysOfDevOps 网络基础专题Day 27的实战指南完整呈现如何在前一天用 EVE-NG 搭建的虚拟网络环境中通过 SSH 隧道安全连接模拟路由器与交换机并利用 Python 生态中的 Paramiko、Netmiko 等库实现设备信息采集、配置下发与配置备份的自动化。读完本文你将掌握一套可复制的模拟拓扑搭建 → SSH 接入 → Python 自动化 → 配置验证与备份完整工作流可直接迁移到真实 Cisco IOS 设备或更多厂商设备的日常运维中。从实验环境到自动化本节的任务定位网络基础专题的最后一个部分我们在 Day 26 创建的模拟实验环境里动手实践若干自动化任务与工具。这里涉及两个核心技术点SSH 隧道客户端与设备之间建立的 SSH 隧道是加密的相比 telnet 明文传输更安全。SSH 的基础概念在 Day 18 的 Linux 章节已经介绍过本节直接把它用到网络设备上。Python 网络自动化以脚本代替逐台设备手工登录实现信息收集、批量配置、配置备份三类典型场景。访问虚拟模拟环境给 EVE-NG 拓扑接入家庭网络要在 EVE-NG 中与交换机交互通常有两种方式在 EVE-NG 网络内部部署一台带 Python 的 Linux 工作站或者像作者一样在拓扑里定义一个能从本地工作站访问到的云Cloud节点直接桥接到家庭网络。操作步骤如下在 EVE-NG 画布上右键点击选择Network再选择Management (Cloud0)即可将拓扑连接到家庭网络。画布上新增的云节点本身不包含任何设备因此需要为新网络中的每台设备补充连接即把路由器、交换机分别与 Cloud0 云节点用链路连起来然后逐台登录设备在云接入侧对应的接口上执行如下命令让它从家庭网络的 DHCP 服务器获取地址enable config t int gi0/0 IP add DHCP no sh exit exit sh ip int br最后一步会让设备从家庭网络的 DHCP 获取 IP 地址。作者的实验设备地址分配如下节点实验网 IP家庭网络 IPRouter10.10.88.110192.168.169.115Switch110.10.88.111192.168.169.178Switch210.10.88.112192.168.169.193Switch310.10.88.113192.168.169.125Switch410.10.88.114192.168.169.197实验网 IP10.10.88.0/24用于设备间互通家庭网络 IP192.168.169.0/24则用于工作站 SSH 接入。仓库中还保留了路由器的完整初始配置 R1可以看到为了让自动化能够顺利接入设备侧预先做好了这些准备启用aaa new-model并配置本地认证username admin password access123生成 RSA 密钥并启用 SSH v2ip ssh version 2、crypto key generate rsa general-keys modulus 1024开启 SCP 服务器ip scp server enableVTY 线路0-15允许所有传输方式并设置login local。这套设备侧预配置与后文的 Python 脚本相互印证正是自动化得以生效的前提。SSH 连接网络设备配置完成后即可用工作站连接家庭网络中的任意设备。作者使用 Putty也可使用 git bash 等支持 SSH 的终端。下图是对路由器R1的 SSH 连接结果。用 Python 从设备收集信息Netmiko 多设备巡检第一个 Python 场景是批量收集所有设备的信息即逐台连接设备并执行简单命令拿到接口配置与状态。脚本保存在 netmiko_con_multi.py其核心逻辑如下#!/usr/bin/env python from netmiko import ConnectHandler from getpass import getpass # password getpass() R1 { device_type: cisco_ios, host: 192.168.169.115, username: admin, password: access123, } # SW1 ~ SW4 结构与 R1 相同仅 host 不同 # ... command show ip int brief for device in (R1, SW1, SW2, SW3, SW4): net_connect ConnectHandler(**device) print(net_connect.find_prompt()) print(net_connect.send_command(command)) net_connect.disconnect()从源码可以看到 Netmiko 自动化运维的几个关键 APIConnectHandler(**device)传入device_type、host、username、password等连接参数建立会话device_type: cisco_ios表明目标设备是 Cisco IOSfind_prompt()返回当前设备提示符用于确认会话建立成功send_command(command)发送单条命令并返回完整输出disconnect()结束会话释放连接。运行该脚本后会在一个终端里依次看到 R1、SW1SW4 五台设备的show ip int brief输出即每台设备的接口名、IP 地址、配置方式、接口与协议状态。当管理大量设备时这类脚本的价值在于所有配置信息能够集中、快速地在一个地方被理解和掌控免去逐台登录排查的繁琐。用 Python 配置设备批量下发 Trunk 配置并验证信息收集只是第一步更实际的需求是用 Python 修改设备配置。假设场景中SW1与SW2之间存在 trunk 端口需要批量地在多个相同的交换机上完成配置避免逐台手工登录修改。使用 netmiko_sendchange.py 即可通过 SSH 连接到SW1并在其上完成变更脚本内容如下from netmiko import ConnectHandler SW2 { device_type: cisco_ios, host: 192.168.169.193, username: admin, password: access123, secret: access123, } core_sw_config [int range gig0/1 - 2, switchport trunk encapsulation dot1q, switchport mode trunk, switchport trunk allowed vlan 1,2] print(########## Connecting to Device {0} ############.format(SW2)) net_connect ConnectHandler(**SW2) net_connect.enable() print(***** Sending Configuration to Device *****) net_connect.send_config_set(core_sw_config)该脚本展示了与收集信息不同的两处核心用法secret参数与enable()方法secret提供进入特权模式的密码net_connect.enable()显式切换进 enable 模式这是下发配置类操作的前置条件send_config_set()接收一个命令列表逐条进入配置模式执行——这里配置了gig0/1 - 2接口范围为 trunk封装 dot1q模式为 trunk并放行 VLAN 1、2。代码中打印了sending configuration to device的提示但脚本并未确认变更是否真实生效。为此作者补充了带校验的版本 netmiko_con_multi_vlan.pycommand show int trunk for device in (SW1, SW2, SW3, SW4): net_connect ConnectHandler(**device) print(net_connect.find_prompt()) print(net_connect.send_command(command)) net_connect.disconnect()它复用show int trunk命令巡检全部四台交换机返回各端口 Trunk 模式、封装类型、链路状态、本征 VLAN 以及允许的 Trunk VLAN 等验证信息。由此形成的完整闭环是下发配置 → 立即用脚本查询验证这正是网络自动化相比手工变更最明显的工程价值。用 Python 备份设备配置Paramiko 定时归档另一个典型场景是抓取并备份网络配置但不需要登录每一台设备手动保存。仓库中的 backup.py 完成了这个自动化它通过 backup.txt 维护待备份设备的 IP 列表即前文表格中的 5 个家庭网络 IP。核心逻辑如下import sys, time, paramiko, os, cmd, datetime now datetime.datetime.now() dt_string now.strftime(%d/%m/%Y %H:%M:%S) print(Your backup has started at, dt_string) tic time.perf_counter() user admin password access123 enable_password access123 port 22 f0 open(backup.txt) for ip in f0.readlines(): ip ip.strip() filename_prefix /Users/shambhu/Documents ip ssh paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip, port, user, password, look_for_keysFalse) chan ssh.invoke_shell() time.sleep(2) chan.send(enable\n) chan.send(enable_password \n) time.sleep(1) chan.send(term len 0\n) time.sleep(1) chan.send(sh run\n) time.sleep(20) output chan.recv(999999) filename %s_%.2i%.2i%i_%.2i%.2i%.2i % (ip, now.year, now.month, now.day, now.hour, now.minute, now.second) f1 open(filename, a) f1.write(output.decode(utf-8)) f1.close() ssh.close() f0.close() toc time.perf_counter() print(Congratulations You Have Backed Up Your 90DaysOfDevOps Lab) print(fYour backup duration was {toc - tic:0.4f} seconds)这段脚本基于 Paramiko 的底层 SSH 通道实现要点包括SSHClient()与set_missing_host_key_policy(AutoAddPolicy())自动接受未知主机密钥invoke_shell()打开交互式 shell随后按顺序发送enable、enable 密码、term len 0关闭分页与sh run并通过recv()抓取完整输出文件名由 IP 与时间戳拼接而成格式如192.168.169.115_20220127_145846每次备份互不覆盖、方便归档。仓库 2022/Days/Networking 目录中保存的192.168.169.115_20220127_145846等文件正是该脚本的真实产物需要留意的是脚本中的filename_prefix指向作者本机的/Users/shambhu/Documents路径实际使用时请改为自己的备份目录。脚本运行时会打印开始时间、备份耗时与完成时间并生成对应设备的备份文件。作者还写了一个简单的 Python 打印脚本用于展示备份文件的内容。网络自动化两大 SSH 模块Paramiko 与 NetmikoParamiko通用 SSH 库Paramiko 是 Python 中最广泛使用的 SSH 实现模块安装方式pip install paramiko安装后进入 Python shell 导入模块即可验证是否成功import paramiko。仓库中的 paramiko_show.py 展示了 Paramiko 的直接用法建立SSHClient连接后调用invoke_shell()进入交互式 shell依次发送enable、密码、terminal length 0以及show ip int b、show arp等命令再通过shell.recv(5000)读取缓冲区输出最后关闭连接。它的定位是通用的 SSH 连接工具并不限定目标设备类型。Netmiko面向网络设备的封装Netmiko 在 Paramiko 之上针对网络设备做了更高层的封装安装方式pip install netmiko与 Paramiko 的通用定位不同Netmiko 专门面向网络设备支持众多网络厂商与设备型号并通过device_type参数自动适配各厂商的命令提示符与交互差异让send_command()、send_config_set()等高层 API 在不同平台上表现一致。它对多厂商网络的适配能力正是前文所有自动化脚本得以简洁的关键。其他值得关注的模块除上述两个模块外网络自动化领域还有一些可扩展工具netaddr用于 IP 地址的运算与操作pip install netaddr即可安装xlrd当交换机配置需要批量维护在 Excel 表格中时用它读取 Excel 工作簿把行与列转换成矩阵供脚本处理pip install xlrd安装。此外还可以进一步探索更多网络自动化使用场景如 PyNet 系列演示资料中整理的示例。小结与下一步网络自动化专题的收尾可以归纳为一条可复用的方法论环境先行在 EVE-NG 中通过 Management(Cloud0) 云节点把模拟拓扑桥接到家庭网络并为每台设备开启 SSH 与本地认证参考 R1 配置模板批量采集用 Netmiko 的ConnectHandlersend_command实现多设备信息巡检netmiko_con_multi.py配置下发与闭环验证用send_config_set批量变更netmiko_sendchange.py再用show int trunk类命令校验结果netmiko_con_multi_vlan.py定期备份用 Paramiko 交互式通道抓取sh run并按时间戳归档backup.py backup.txt。网络工程领域内容庞杂本文示例大多取材于《Hands-On Enterprise Automation with Python》一书中的典型场景可作为深入学习的参考书。接下来将进入云计算的专题在 Day 28 中学习云计算的基础知识。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 网络自动化实战用 Python Netmiko/Paramiko 管理 EVE-NG 仿真设备Day 2790DaysOfDevOps 网络自动化实战用 Python Netmiko/Paramiko 管理 EVE NG 仿真设备Day 27 本文对应 9文档/教程3步把微信聊天记录全部导出来WeChatMsg完整上手指南3步把微信聊天记录全部导出来WeChatMsg完整上手指南 换了台电脑去年的聊天记录一条也找不回来重装系统后群里发过的文件也永远丢了。WeChatMsg文档/教程90DaysOfDevOps 网络自动化实战Day 26用 EVE-NG 构建网络自动化实验环境90DaysOfDevOps 网络自动化实战Day 26用 EVE NG 构建网络自动化实验环境 导读 本篇文章承接 Day 25 的 EVE NG 安文档/教程上一篇3个步骤让Translumo成为你的游戏外语翻译神器下一篇如何轻松捕获并下载微信视频号、抖音、小红书等平台内容这款跨平台资源下载工具给你终极答案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考