
文档/教程【免费下载链接】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点击查看免费下载本指南围绕 Day 25 的核心主题展开为什么 Python 是网络自动化的事实标准语言以及如何从零开始搭建一套可练习的网络自动化实验环境。文中将完整复现基于 EVE-NG 社区版与 VMware Workstation 的安装配置流程并结合仓库 2022/Days/Networking 目录下的真实脚本Paramiko、Netmiko与设备配置说明从「模拟器安装 → 设备上线 → 脚本驱动」的完整链路。读完本文你将掌握一套可复现的沙箱实验方法论并为后续编写 telnetlib、Netmiko、Paramiko、Pexpect 自动化脚本打下基础。为什么网络自动化首选 PythonPython 是自动化网络运维的标准语言。这一判断在仓库中有着直接体现整个 90DaysOfDevOps 项目的运维示例Ansible 等大多以 Python 为底层实现。即便不专攻网络自动化在查找各类运维资源时Python 也几乎无处不在——如果某个工具不是用 Python 写的那它多半是同样基于 Python 的 Ansible。作者在“学习一门编程语言”阶段之所以选择 Go 而非 Python是因为所在公司以 Go 为主这是出于工作场景的考量但若没有这个前提Python 会是更优先的学习对象。这个背景恰恰说明选择语言应先看生态与任务匹配度而网络自动化领域Python 的生态优势极为突出。Python 之所以成为网络自动化的事实标准核心原因可以归纳为三点可读性与易用性Python 的语法天然贴合直觉代码块的开始与结束不需要{}这类花括号标记仅靠缩进即可表达结构。配合 VS Code、PyCharm 等强大 IDE运行 Python 代码几乎没有门槛。丰富的库生态Python 的扩展性是其真正的金矿。它不仅适用于网络自动化还为各类设备与配置准备了大量现成库。安装库时使用pip工具连接 PyPI 并下载到本地工作站即可。Cisco、Juniper、Arista 等网络厂商都开发了官方库用于简化对其设备的访问。强大且高效对比 Go 章节中“Hello World”需要约 6 行代码Python 只需一行print(hello world)将以上几点叠加就不难理解为什么业界在讨论自动化时Python 几乎总是被提及的默认工具。需要强调的是这里讨论的自动化与多年前“写脚本批量登录设备做配置备份、采集日志”有本质区别。过去那种脚本是外围的、人工流程的补充而今天之所以能真正自动化是因为整体网络架构本身也在向更利于自动化的方向演进主要体现在三个趋势软件定义网络SDNSDN 控制器负责向网络内所有设备下发控制平面配置网络变更从此只有一个接触点不再需要逐台 telnet/SSH 登录也摆脱了对人工操作人工即存在重复性故障与配置错误风险的依赖。高层编排High-Level Orchestration在 SDN 控制器之上再抽象一层即可对服务级别进行编排并能将该编排层集成到 VMware、Kubernetes、公有云等任意目标平台。策略驱动管理Policy-Based Management你只需描述“想要什么、期望状态是什么”系统会自动推导出达成该期望状态所需的全部细节。正是这三重演进让“用 Python 自动化网络”从脚本技巧升级为体系化的工程实践。实验环境选型EVE-NG 与替代方案并非所有人都能接触到真实的物理路由器、交换机等网络设备。为了让“自动化配置网络”变得可亲手实践需要一套虚拟化沙箱环境。可选方案主要有以下几种GNS3 VM另一款主流网络模拟器作者曾在使用 VirtualBox 承载 GNS3 时遇到过嵌套虚拟化问题。EVE-NGEmulated Virtual Environment Next Generation本指南采用的方案。虚拟环境意味着可以拥有一个沙箱安全地测试大量不同场景还能自由组合不同设备与拓扑这正是学习与实验的最佳形态。Unimus严格说它不是实验环境而是一个网络配置备份/推送平台但其“自动化管理网络配置”的概念值得了解。本指南全程使用EVE-NG 社区版Community Edition完成所有操作其下载、安装与配置均为免费流程。在 VMware Workstation 上安装 EVE-NG第一步获取镜像文件EVE-NG 社区版以ISO和OVF两种格式发布OVF 格式可直接导入 VMware Workstation / Player本指南采用此方式。ISO 格式适合在没有 Hypervisor 的场景下直接在裸金属服务器上构建。安装载体上作者使用通过 vExpert 计划获得授权的VMware Workstation但VMware Workstation Player免费版或官方文档中列出的其他选项同样可行。一个关键约束是不能使用此前常用的 VirtualBox——即使在“官方支持”的 GNS3 场景下VirtualBox 也曾在嵌套虚拟化方面给作者带来过麻烦。第二步导入 OVF 并调整虚拟机规格打开 VMware Workstation选择File→Open导航到 EVE-NG OVF 镜像下载位置。EVE-NG OVF 下载后位于压缩包内需要先解压到独立文件夹再进行导入。为虚拟机起一个可识别的名称并存储到系统合适的位置。导入完成后将处理器Processors调整为 4 核、内存Memory调整为 8GB新版镜像导入后通常已如此否则需手动编辑 VM 设置。务必勾选Virtualize Intel VT-x/EPT 或 AMD-V/RVI选项。该选项指示 VMware Workstation 将虚拟化标志透传给客户机操作系统即启用嵌套虚拟化。作者此前在 VirtualBox 上运行 GNS3 的问题正是源于此。第三步解决 WSL2 与嵌套虚拟化冲突这里有一个容易踩的“兔子洞”作者在 Windows 机器上运行 WSL2 时发现环境内无法再嵌套运行任何虚拟机——WSL2 似乎“占用”了 CPU 的 Intel VT-d 虚拟化能力令人困惑的是 Ubuntu 虚拟机却能运行。这并非虚拟化平台本身的故障。解决方法是在 Windows 系统上执行以下命令并重启系统注意关闭 hypervisor 启动期间将无法使用 WSL2bcdedit /set hypervisorlaunchtype off需要恢复 WSL2 时再次执行并重启bcdedit /set hypervisorlaunchtype auto两条命令均须以管理员身份运行。第四步首次启动与系统初始化启动 EVE-NG 虚拟机后会看到登录提示。使用以下凭据登录username root password eve登录后系统会要求重新设置 root 密码该密码将用于之后通过 SSH 登录 EVE-NG 主机。随后按向导完成修改主机名hostname定义 DNS 域名示例中使用90DaysOfDevOps.net这类名称配置网络选择**静态static**地址确保 IP 在重启后保持持久输入静态 IP需提供网络、子网掩码、默认网关与 DNS——注意该 IP 必须能被你的工作站访问。完成上述步骤后系统会重启重启完成后将静态 IP 输入浏览器即可访问 EVE-NG Web 界面。默认凭据汇总访问方式用户名密码GUIWeb 界面admineveSSH主机rooteve若在初始化时修改过则以修改值为准Web 控制台建议选择HTML5模式而非 Native在浏览不同设备控制台时HTML5 会在浏览器中打开新标签页操作更顺畅。为实验补充设备客户端包与网络镜像完成 EVE-NG 主机部署后下一步是为实验补充“设备素材”仓库的 day26 文档提供了完整流程安装 EVE-NG Client Pack该客户端包用于指定通过 SSH 连接设备时使用的应用程序同时会为链路抓包配置 Wireshark支持 Windows、macOS、Linux。Linux 客户端可选用开源的 eve-ng-integration 集成包。安装过程一路默认即可。加载网络镜像将 Cisco vIOS L2交换机与 Cisco vIOS路由器镜像上传到 EVE-NG。作者使用 FileZilla 通过 SFTP 将 qcow2 镜像传输到 EVE-NG 虚拟机。镜像的获取与上传细节较繁琐可参考社区博客与视频教程逐步完成并注意所有镜像仅用于教学目的建议从厂商官方渠道获取。创建实验拓扑在 EVE-NG Web 界面中新建 Lab规划拓扑为4 台交换机 1 台路由器路由器充当外部网络网关设备 IP 规划如下节点IP 地址RouterR110.10.88.110Switch1SW110.10.88.111Switch2SW210.10.88.112Switch3SW310.10.88.113Switch4SW410.10.88.114添加节点并连接在空白画布上右键选择 “Add Node”从节点列表中选择 1 个 Cisco vIOS Router 与 4 个 Cisco vIOS Switch已加载镜像的设备为蓝色可选其余为灰色。通过悬停设备出现的连接图标完成节点连线还可以用方框/圆圈框定物理边界区域、用文本标注设备名称与 IP。全部设备就绪后全选并右键 “Start Selected” 启动实验。下发基础配置设备启动后初始状态是无配置的“白板”。通过控制台逐台配置或直接复用仓库中作者留下的配置。仓库设备配置实战让实验设备“可被自动化”为了让后续 Python 脚本能顺利连接设备需要在设备上启用 SSH、本地认证与必要的服务。仓库中 Networking/R1 提供了一份可直接参考的路由器配置其关键段落如下hostname R1 int gig0/0 no shutdown ip add 10.10.88.110 255.255.255.0 aaa new-model aaa session-id unique aaa authentication login default local aaa authorization exec default local none enable password access123 username admin password access123 no ip domain-lookup lldp run ip domain-name 90DaysOfDevOps.net ip ssh version 2 ip scp server enable crypto key generate rsa general-keys modulus 1024该配置的核心思路可以拆解为几条自动化前提AAA 本地认证aaa authentication login default local让设备只认本地用户库配合username admin password access123建立 SSH 登录账户。SSH 服务就绪ip domain-namecrypto key generate rsa是生成 RSA 密钥的前提ip ssh version 2指定 SSHv2ip scp server enable开启 SCP可用于镜像/文件传输。管理面优化line vty 0 15段启用login local、privilege level 15、exec-timeout 0 0保证脚本长连接不因超时中断enable password access123为脚本进入特权模式提供口令。可观测性snmp-server与logging系列命令为后续监控类自动化如配置巡检、告警采集预留了接口。SW1SW4 的交换机配置同样存放于 2022/Days/Networking 目录SW1、SW2、SW3、SW4配合 R1 即可在模拟环境中搭建出带网关与多交换机互连的完整拓扑。用 Paramiko 编写第一个连接脚本设备就绪后就可以开始用 Python 与设备交互。仓库 paramiko_show.py 是一个基于ParamikoSSHv2 协议的 Python 实现库的最小示例#!/usr/bin/python import paramiko import time Channel paramiko.SSHClient() Channel.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Channel.connect(hostname192.168.169.115, usernameadmin, passwordaccess123, look_for_keysFalse, allow_agentFalse) shell Channel.invoke_shell() # This will set interactive shell shell.send(enable\n) shell.send(access123\n) shell.send(terminal length 0\n) shell.send(show ip int b\n) shell.send(show arp \n) time.sleep(2) print(shell.recv(5000)) # This will receive everything from the buffer, if you need to receive specific output, then you should execute the command # and immediately receive the output before executing the 2nd command, Also you should sleep a little Channel.close()脚本要点拆解set_missing_host_key_policy(paramiko.AutoAddPolicy())自动接受未知主机密钥适合实验环境生产环境应替换为RejectPolicy等安全策略。invoke_shell()打开交互式 shell模拟“人坐在终端前”的操作方式。逐条send命令模拟人工输入先enable进入特权模式再发送 enable 密码terminal length 0取消分页避免输出被截断最后执行show ip int b、show arp等查询命令。time.sleep(2)与recv(5000)等待设备响应并读取缓冲区。注释中也给出了一条重要经验若需接收特定命令的输出应在执行下一条命令前立即读取并适当 sleep否则多条命令输出会混在缓冲区中。这是理解“网络自动化”最底层形态的窗口通过程序化地模拟键盘输入来驱动设备。它虽然可行但需要手工处理分页、等待、缓冲区等细节——这正是下一节 Netmiko 所要解决的问题。用 Netmiko 批量巡检多台设备Netmiko 在 Paramiko 之上封装了与网络设备的交互细节提示符匹配、分页处理、特权模式切换等。仓库 netmiko_con_multi.py 演示了如何用设备字典 循环对 5 台设备批量执行命令#!/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 { device_type: cisco_ios, host: 192.168.169.178, username: admin, password: access123, } # SW2 / SW3 / SW4 的设备字典结构完全相同仅 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()要点说明device_typecisco_ios告诉 Netmiko 使用哪种设备的交互逻辑Cisco IOS 系。ConnectHandler(**device)将设备字典展开为连接参数。find_prompt()返回设备当前提示符可用于确认连接已建立。send_command(command)自动等待提示符返回并完整输出结果无需再手工 sleep 或处理分页。循环内对 5 台设备逐一disconnect()实现“一次脚本巡检整个实验拓扑”。仓库中还有针对交换机链路状态的变体 netmiko_con_multi_vlan.py结构完全相同只是将命令换成show int trunk并只巡检 4 台交换机——这展示了同一套脚本骨架替换命令即可复用的思路。用 Netmiko 推送配置变更巡检之外自动化更核心的价值在于“变更”。仓库 netmiko_sendchange.py 演示了如何向交换机推送一组配置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所需的密码。net_connect.enable()显式进入特权模式。send_config_set()Netmiko 会自动进入配置模式configure terminal逐条下发列表中的配置命令结束后退出配置模式。这里是配置gig0/1 - 2 端口为中继trunk并放行 VLAN 1、2的典型交换机操作。对比 Paramiko 示例可以清晰地看到抽象层级Paramiko 需要手工处理 enable、分页、sleep而 Netmiko 把“进入配置模式、下发、退出”封装成了一个方法调用。用 Paramiko 实现配置备份流水线自动化运维最常见的落地场景之一是定期配置备份。仓库 backup.py 给出了一个完整可运行的批量备份脚本import sys import time import paramiko import os import cmd import 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 input(Enter username:) #password input(Enter Paswd:) #enable_password input(Enter enable pswd:) user admin password access123 enable_password access123 port22 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) dt_string now.strftime(%d/%m/%Y %H:%M:%S) print(Your backup completed at, dt_string)该脚本的设计要点设备清单外置通过读取 backup.txt内容为 5 台设备的 IP每行一个驱动循环新增设备只需在文件中加一行。逐台备份对每台设备 SSH 登录 → 进入 enable →term len 0取消分页 → 执行sh run→ 等待 20 秒收集完整输出。时间戳命名文件名包含设备 IP 与精确到秒的时间戳IP_年月日_时分秒保证每次备份不覆盖。性能度量使用time.perf_counter()统计整个备份流程耗时并打印便于后续优化或纳入定时任务。脚本中还保留了通过input()交互输入用户名/密码的注释代码生产环境中建议改用 getpass 或环境变量避免凭据硬编码。总结与下一步至此我们已经完成了一条完整的实验闭环理解 Python 成为网络自动化标准语言的原因 → 通过 EVE-NG 搭建可复现的虚拟网络 → 加载 Cisco 镜像并规划拓扑 → 用 Paramiko 实现底层交互 → 用 Netmiko 批量巡检与推送变更 → 用 Paramiko 构建配置备份流水线。本阶段脚本涉及的工具与思路将延续到后续章节仓库 2022/Days/Networking 中设备配置文件R1、SW1SW4是实验拓扑的“标准答案”day26 给出了搭建拓扑的完整图解流程而后续 day27 及之后将继续深入 telnetlib、Netmiko、Paramiko、Pexpect 等库的更多玩法。建议读者按“设备配置 → 单台连接 → 批量巡检 → 配置变更 → 备份流水线”的顺序逐步动手将本文的每个脚本都亲手运行一遍才能真正把“自动化思维”落地到自己的实验环境中。赞分享文档/教程【免费下载链接】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 与 EVE-NG 构建可编程网络实验环境90DaysOfDevOps 网络自动化实战用 Python 与 EVE NG 构建可编程网络实验环境 在 90DaysOfDevOps 的 Day 25 课文档/教程90DaysOfDevOps 网络自动化实战Day 26用 EVE-NG 构建网络自动化实验环境90DaysOfDevOps 网络自动化实战Day 26用 EVE NG 构建网络自动化实验环境 导读 本篇文章承接 Day 25 的 EVE NG 安文档/教程90DaysOfDevOps 网络自动化入门从 Python 语言选型到 EVE-NG 虚拟化实验环境搭建90DaysOfDevOps 网络自动化入门从 Python 语言选型到 EVE NG 虚拟化实验环境搭建 导读 本文是 90DaysOfDevOps 学习路文档/教程上一篇Semgrep 静态分析实战从一条规则到 CI/CD 自动查漏洞下一篇如何验证量化模型transcribe.cpp黄金文件与容差配置完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考