当前位置: 首页 > article >正文

Python脚本翻车实录:我这样备份华为交换机配置,结果把网搞瘫了

Python脚本翻车实录我是如何用自动化备份搞瘫华为交换机的那天凌晨两点我被一阵急促的电话铃声惊醒。电话那头是值班同事焦急的声音核心交换机CPU飙到100%整个办公区网络瘫痪了而我正是这场事故的始作俑者——一个自以为很智能的Python备份脚本的作者。1. 从自信满满到灾难现场作为团队里唯一会Python的技术宅我接下了自动化备份华为交换机的任务。当时的想法很简单不就是用SSH连上设备执行几个命令把配置保存下来吗三天后我交出了一个完美脚本还得意地加入了自动配置FTP、智能识别设备型号等高级功能。脚本的主要亮点包括自动读取Excel表格中的设备信息动态检测并配置FTP服务并发执行多台设备备份按设备型号自动适配命令部署当晚脚本开始运行后的第17分钟监控系统发出警报。核心交换机的CPU使用率从平时的30%瞬间飙升到100%紧接着是接入层设备相继离线。等我赶到机房时整个网络已经像多米诺骨牌一样彻底瘫痪。2. 问题排查脚本中的致命陷阱经过6小时的紧急恢复和后续分析我们终于锁定了问题根源。原来我的脚本中存在几个致命的设计缺陷2.1 并发连接的资源风暴# 原脚本中的危险代码片段 from concurrent.futures import ThreadPoolExecutor def batch_backup(): devices get_all_devices() with ThreadPoolExecutor(max_workers20) as executor: executor.map(backup_single_device, devices)看似高效的并发设计实际上成了灾难的导火索同时建立20个SSH连接导致交换机认证模块过载未限制命令执行间隔多个会话争抢CPU资源缺乏异常处理一个设备超时会导致连锁反应2.2 FTP自动配置的隐蔽风险def auto_config_ftp(ssh): commands [ ftp server enable, fftp server acl permit source {local_ip} ] for cmd in commands: send_command(ssh, cmd) # 没有检查命令是否执行成功这个智能功能在实际运行中暴露了严重问题部分老型号设备不支持新版的FTP配置语法脚本没有验证命令执行结果就继续后续操作错误的ACL规则导致设备安全策略混乱2.3 命令缓冲区的隐形炸弹def send_command(ssh, command): ssh.send(command \n) time.sleep(1) # 固定1秒等待太武断 output ssh.recv(65535).decode() return output这种简单的命令交互方式存在诸多隐患固定1秒等待无法适应不同命令的执行时间缓冲区大小设置不当可能导致输出截断没有处理命令执行失败的情况3. 血泪换来的网络自动化军规这次事故后我们总结出了一套网络自动化脚本的生存法则3.1 资源管控三原则连接数控制单台设备并发连接不超过3个CPU保护机制实时监控设备负载超过阈值立即暂停带宽预留备份流量不超过链路带宽的30%改进后的连接管理代码from ratelimit import limits, sleep_and_retry sleep_and_retry limits(calls3, period60) # 每分钟最多3次连接 def safe_connect(device): try: client SSHClient() client.connect(device.ip, timeout10) return client except Exception as e: log_error(f连接{device.ip}失败: {str(e)}) raise3.2 命令执行的黄金准则危险操作安全替代方案说明直接发送命令使用confirm_safe_command()包装验证命令是否在白名单中固定时间等待基于正则匹配的智能等待直到出现特定提示符才继续无限制重试指数退避重试机制失败后等待时间逐渐增加安全命令执行示例def execute_safe(ssh, command): if not is_command_allowed(command): # 命令白名单检查 raise InvalidCommandError ssh.send(command \n) return wait_for_prompt(ssh) # 基于正则的智能等待 def wait_for_prompt(ssh, timeout60): start time.time() buffer while time.time() - start timeout: buffer ssh.recv(1024).decode() if re.search(r[\w-], buffer): # 匹配设备提示符 return buffer time.sleep(0.1) raise TimeoutError(未收到设备提示符)3.3 防御性编程四要素输入验证严格校验所有外部输入def validate_ip(ip): pattern r^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ if not re.match(pattern, ip): raise ValueError(f非法IP地址: {ip}) return ip环境检测执行前验证设备状态def check_device_health(ip): ping_result os.system(fping -c 1 {ip}) if ping_result ! 0: raise DeviceUnreachableError熔断机制异常达到阈值立即停止class CircuitBreaker: def __init__(self, max_failures3): self.failures 0 self.max_failures max_failures def execute(self, func): if self.failures self.max_failures: raise CircuitOpenError try: result func() self.failures 0 return result except Exception: self.failures 1 raise回滚设计每个变更都要有撤销方案def config_ftp_with_rollback(ssh): original_config get_ftp_config(ssh) try: enable_ftp(ssh) # 其他配置操作... except Exception: restore_ftp_config(ssh, original_config) raise4. 重生后的稳健备份方案经过三个月的重构我们开发出了全新的网络配置备份系统关键改进包括4.1 分级备份策略备份优先级矩阵设备类型备份频率允许时间窗口重试机制核心设备每日02:00-04:002次间隔30分钟汇聚设备每周01:00-03:001次间隔1小时接入设备每月00:00-06:00无重试4.2 增强型备份脚本架构class NetworkBackup: def __init__(self): self.breaker CircuitBreaker(max_failures3) self.lock threading.Lock() def safe_backup(self, device): with self.lock: # 确保同一设备不会并发操作 try: self.breaker.execute(lambda: self._backup_device(device)) except Exception as e: alert_ops_team(device, str(e)) def _backup_device(self, device): validate_ip(device.ip) check_device_health(device.ip) with SSHConnection(device) as ssh: config execute_safe(ssh, display current-configuration) save_to_secure_storage(device, config) verify_backup(device) # 备份后校验4.3 备份完整性验证流程校验文件哈希比对设备生成的MD5和本地文件配置语法检查使用厂商模拟器验证配置有效性最小化测试将备份配置应用到测试设备验证def verify_backup(device): # 获取设备端配置的哈希值 remote_hash get_remote_hash(device) # 计算本地备份文件的哈希 local_hash calculate_local_hash(device.backup_path) if remote_hash ! local_hash: raise BackupCorruptedError( f哈希不匹配: 设备{remote_hash} ! 本地{local_hash} ) # 使用VRP模拟器验证配置语法 if not validate_with_emulator(device.backup_path): raise InvalidConfigError(配置语法验证失败)那次事故后我养成了一个习惯每次写自动化脚本前都会先问自己三个问题——这个操作如果同时执行100次会怎样如果中途失败如何安全退出如果有恶意输入会有什么后果这三个问题价值百万。

相关文章:

Python脚本翻车实录:我这样备份华为交换机配置,结果把网搞瘫了

Python脚本翻车实录:我是如何用自动化备份搞瘫华为交换机的 那天凌晨两点,我被一阵急促的电话铃声惊醒。电话那头是值班同事焦急的声音:"核心交换机CPU飙到100%,整个办公区网络瘫痪了!"而我,正是…...

别再手动去重了!R语言处理基因表达矩阵重复基因名的两种高效方法(附完整代码)

R语言基因表达矩阵去重实战:两种策略的深度解析与代码优化 刚接触RNA-seq数据分析的研究者,往往会在ensembl_id转换为gene symbol时遇到一个棘手问题——重复基因名。面对GEO数据库下载的表达矩阵中成百上千个重复基因名,手动处理不仅效率低下…...

终极React-Redux开源贡献指南:从新手到贡献者的完整路径

终极React-Redux开源贡献指南:从新手到贡献者的完整路径 【免费下载链接】react-redux Official React bindings for Redux 项目地址: https://gitcode.com/gh_mirrors/re/react-redux React-Redux作为React官方推荐的Redux绑定库,是现代前端开发…...

单图3D重建避坑指南:为什么你的PyTorch模型生成的总是‘一团浆糊’?

单图3D重建避坑指南:为什么你的PyTorch模型生成的总是‘一团浆糊’? 当你兴奋地跑完最后一个epoch,满心期待地打开可视化工具,却发现生成的3D结构像被揉皱的纸团——这可能是每个单图3D重建实践者都经历过的噩梦。本文将带你直击四…...

React-Redux面试宝典:100+常见面试题和解答大全

React-Redux面试宝典:100常见面试题和解答大全 【免费下载链接】react-redux Official React bindings for Redux 项目地址: https://gitcode.com/gh_mirrors/re/react-redux React-Redux作为React官方推荐的Redux绑定库,是前端面试中的高频考点。…...

如何使用radare2进行程序切片:实现关注点分离的终极逆向工程指南

如何使用radare2进行程序切片:实现关注点分离的终极逆向工程指南 【免费下载链接】radare2 UNIX-like reverse engineering framework and command-line toolset 项目地址: https://gitcode.com/gh_mirrors/ra/radare2 radare2是一款功能强大的UNIX-like逆向…...

告别繁琐操作:用Universal-Updater轻松管理你的3DS自制软件库

告别繁琐操作:用Universal-Updater轻松管理你的3DS自制软件库 【免费下载链接】Universal-Updater An easy to use app for installing and updating 3DS homebrew 项目地址: https://gitcode.com/gh_mirrors/un/Universal-Updater 你是否曾经为3DS自制软件的…...

3分钟解锁《鸣潮》120FPS:WaveTools工具箱全面评测与使用指南

3分钟解锁《鸣潮》120FPS:WaveTools工具箱全面评测与使用指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否在为《鸣潮》游戏中的60FPS帧率限制而烦恼?高端硬件无法充分发挥…...

TsubakiTranslator:3分钟学会Galgame实时翻译的终极指南

TsubakiTranslator:3分钟学会Galgame实时翻译的终极指南 【免费下载链接】TsubakiTranslator 一款Galgame文本翻译工具,支持Textractor/剪切板/OCR翻译 项目地址: https://gitcode.com/gh_mirrors/ts/TsubakiTranslator 还在为日语Galgame的剧情理…...

终极指南:如何计算卡特兰数并掌握其5大实际应用场景

终极指南:如何计算卡特兰数并掌握其5大实际应用场景 【免费下载链接】C Collection of various algorithms in mathematics, machine learning, computer science, physics, etc implemented in C for educational purposes. 项目地址: https://gitcode.com/gh_mi…...

PEG/COOH-BPQDs功能化黑磷量子点的差异分析

中英文名称: PEG-BPQDs,PEG修饰黑磷量子点 COOH-BPQDs,羧基功能化黑磷量子点 一、PEG-BPQDs,PEG修饰黑磷量子点 PEG-BPQDs是指在黑磷量子点(Black Phosphorus Quantum Dots,BPQDs)表面引入聚乙二…...

魔兽争霸3终极优化解决方案:让经典游戏在现代电脑上流畅运行

魔兽争霸3终极优化解决方案:让经典游戏在现代电脑上流畅运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在Windows 10…...

130+现代C++代码示例解析:从C++11到C++23的终极学习指南

130现代C代码示例解析:从C11到C23的终极学习指南 【免费下载链接】modern-cpp-features A cheatsheet of modern C language and library features. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-cpp-features 现代C代码示例是一份全面的C特性速查手…...

终极免费音乐解锁指南:3步轻松解密你的加密音乐文件

终极免费音乐解锁指南:3步轻松解密你的加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...

Retrieval-based-Voice-Conversion-WebUI:如何用10分钟语音数据打造专属AI语音模型?

Retrieval-based-Voice-Conversion-WebUI&#xff1a;如何用10分钟语音数据打造专属AI语音模型&#xff1f; 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Tr…...

分布式密钥生成(DKG)的技术挑战与星型拓扑创新方案

1. 分布式密钥生成的技术挑战与创新方案在多方安全计算领域&#xff0c;分布式密钥生成(Distributed Key Generation, DKG)一直是密码学工程实现中的核心难题。传统方案面临着一个看似矛盾的需求&#xff1a;既要保证每个参与方生成的私钥分片不被泄露&#xff0c;又要让其他参…...

终极指南:如何高效使用Karakeep API实现书签管理自动化

终极指南&#xff1a;如何高效使用Karakeep API实现书签管理自动化 【免费下载链接】hoarder A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search 项目地址: https://gitcode.com/gh_mirrors/ho/hoar…...

别再手动写Pipeline了!用这5个Jenkins插件让你的CI/CD脚本效率翻倍

别再手动写Pipeline了&#xff01;用这5个Jenkins插件让你的CI/CD脚本效率翻倍 每次打开Jenkinsfile看到重复的Groovy代码块时&#xff0c;我都忍不住想——这简直是在浪费生命。上周团队新来的DevOps工程师提交了一个包含200行Pipeline脚本的PR&#xff0c;其中光是文件操作就…...

RL78单片机DataFlash读写避坑指南:用PFDL库搞定数据存储(CS+ for CC配置详解)

RL78单片机DataFlash读写避坑指南&#xff1a;用PFDL库搞定数据存储&#xff08;CS for CC配置详解&#xff09; 在嵌入式开发领域&#xff0c;RL78系列单片机因其低功耗和高可靠性备受青睐。而DataFlash作为非易失性存储解决方案&#xff0c;在参数保存、日志记录等场景中扮演…...

量子计算工程化卡点突破:Docker 27原生支持QIR二进制注入与量子门延迟仿真(实测时延降低83.6%,附27行核心Dockerfile代码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker 27 量子计算环境适配案例 Docker 27 引入了对 Linux cgroups v2 的深度集成与原生 QEMU 用户模式仿真支持&#xff0c;为运行量子计算模拟器&#xff08;如 Qiskit Aer、PennyLane Lightning GP…...

如何快速掌握数据科学模式识别技术:从零到精通的完整学习指南

如何快速掌握数据科学模式识别技术&#xff1a;从零到精通的完整学习指南 【免费下载链接】data-science &#x1f4ca; Path to a free self-taught education in Data Science! 项目地址: https://gitcode.com/gh_mirrors/da/data-science GitHub 加速计划 / da / dat…...

LSLib终极指南:神界原罪与博德之门3 MOD开发的5个核心技巧

LSLib终极指南&#xff1a;神界原罪与博德之门3 MOD开发的5个核心技巧 【免费下载链接】lslib Tools for manipulating Divinity Original Sin and Baldurs Gate 3 files 项目地址: https://gitcode.com/gh_mirrors/ls/lslib 如果你正在为《神界原罪》系列或《博德之门3…...

保姆级教程:基于RK3588S的8K视频播放器实战(从硬件选型到FFmpeg编译)

基于RK3588S的8K视频播放器全栈开发指南 当8K分辨率逐渐从概念走向消费级市场&#xff0c;如何利用高性能硬件构建流畅的播放体验成为开发者面临的新挑战。RK3588S作为Rockchip旗舰级处理器&#xff0c;凭借其8K60fps的视频解码能力和丰富的多媒体接口&#xff0c;为嵌入式视频…...

从“解决”到“消解”:电车难题作为AI元人文的第一次工程实验

从“解决”到“消解”&#xff1a;电车难题作为AI元人文的第一次工程实验摘要传统自动驾驶伦理试图回答“算法应当如何选择”——本质上是旧主体结构内的规则修补。本文基于一篇题为《电车难题的一个原创解决方案》的博客&#xff0c;揭示其未被广泛识别的前提&#xff1a;该方…...

NexaSDK:端侧AI推理框架全解析,解锁NPU原生支持与跨平台部署

1. 项目概述&#xff1a;为什么我们需要一个全新的端侧AI推理框架&#xff1f; 如果你最近在折腾大模型&#xff0c;尤其是想把它们塞进手机、电脑或者嵌入式设备里跑起来&#xff0c;那你肯定对 llama.cpp 、 Ollama 这些名字不陌生。它们确实很棒&#xff0c;让本地运行…...

AI Agent工作流与提示工程:构建自动化内容创作系统的核心技术解析

1. 项目概述&#xff1a;当AI开始“做梦”&#xff0c;一个自动化内容创作的探索 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 openclaw-auto-dream 。光看名字&#xff0c;就透着一股子赛博朋克的味道——“自动做梦”。这可不是什么玄学或者心理学实验&#xff0c…...

当风在数字地球上起舞:cesium-wind如何让气象数据变得生动有趣

当风在数字地球上起舞&#xff1a;cesium-wind如何让气象数据变得生动有趣 【免费下载链接】cesium-wind wind layer of cesium 项目地址: https://gitcode.com/gh_mirrors/ce/cesium-wind 你是否曾经盯着二维的气象图&#xff0c;试图在脑海中构建出三维的风场流动&…...

Node.js 服务端应用快速接入 Taotoken 实现智能客服回复功能

Node.js 服务端应用快速接入 Taotoken 实现智能客服回复功能 1. 准备工作 在开始编码前&#xff0c;需要完成两项基础配置&#xff1a;获取 Taotoken API Key 并安装必要的 Node.js 依赖。登录 Taotoken 控制台&#xff0c;在「API 密钥」页面创建新密钥&#xff0c;建议为生…...

如何轻松解除原神60帧限制:完整免费工具使用指南

如何轻松解除原神60帧限制&#xff1a;完整免费工具使用指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否在探索提瓦特大陆时&#xff0c;总觉得画面不够流畅顺滑&#xff1f;当…...

开源安全平台PANIC:主动威胁狩猎与入侵检测实战解析

1. 项目概述与核心价值 最近在安全研究圈子里&#xff0c;一个名为“PANIC”的开源项目引起了我的注意。这个项目由 bensabanas 发布在 GitHub 上&#xff0c;全称是“Privilege Abuse and Network Intrusion Countermeasures”。光看名字&#xff0c;你就能感受到它的野心——…...