SuperAPI AI 工具集

netmiko-ssh-automation

部署与运维

查看项目

更新于 10-15 08:38

技能介绍

用途

当需要编写或审查通过 Netmiko 连接网络设备的 Python 自动化脚本时,可使用本技能。其核心定位是安全:默认路径为只读,配置变更需独立的变更窗口、同行评审与回滚计划。资料列出的典型使用场景包括:

  • 跨路由器、交换机或防火墙采集 show 命令输出。
  • 为接口、路由或配置证据编写小型审计脚本。
  • 为网络 SSH 脚本添加超时与异常处理。
  • 在存在模板时使用 TextFSM 解析命令输出。
  • 在自动化脚本接触生产设备前进行审查。

主要能力与安全默认值

资料给出的安全默认值包括:以只读的 send_command() 采集为起点;保持清单小且明确,不扫描整个地址段;通过环境变量、vault 或 getpass 获取凭据,绝不硬编码;设置连接与读取超时;限制并发以免老旧设备过载;在调用 send_config_set() 前要求显式的操作标志;在变更经过验证与批准前不调用 save_config()。

只读连接模式

示例展示了 ConnectHandler 的典型用法:device_type 为 cisco_ios,host 使用文档占位地址,用户名与密码优先从环境变量获取,否则通过 input 或 getpass 交互输入,secret 来自环境变量;并设置 conn_timeout、auth_timeout、banner_timeout、read_timeout_override。连接后检查是否处于 enable 模式,再通过 send_command 执行 show 命令。异常处理分别捕获 NetmikoAuthenticationException(认证失败)、NetmikoTimeoutException(SSH 连接超时)和 ReadTimeout(命令读取超时)。资料提醒示例使用文档保留地址,真实清单应放在被忽略的本地文件或受密钥管理的系统中。

批量采集

示例定义 collect_show 函数,使用 ConnectHandler 执行单条命令并返回包含 host、ok、output 或错误类型名的字典;通过 ThreadPoolExecutor 配合 as_completed 并发执行,max_workers 设为 8。资料提示除非明确设备规模和 AAA 系统能够承受更高连接量,否则应保持较低的并发数。

结构化解析

Netmiko 可让 TextFSM、TTP 或 Genie 解析受支持的命令输出。示例调用 send_command 时传入 use_textfsm=True、raise_parsing_error=False 和 read_timeout。若返回值为字符串,说明没有匹配的解析模板,应保留原始输出供审查;否则逐行打印解析结果。资料强调解析输出只是优化手段,不是唯一证据路径;若解析结果用于阻断性决策,应同时保留原始命令输出以便操作人员核查不一致之处。

受保护的配置变更模式

示例将候选命令放入列表,通过环境变量 APPLY_NETWORK_CHANGES 是否为 "1" 决定是否真正执行。未设置时只打印“干跑”候选命令;设置时才连接、enable,先采集变更前的接口运行配置,再调用 send_config_set,最后再次采集变更后配置并打印三段内容,并提示在保存启动配置前验证行为。保存配置是独立的审批步骤,生产环境中应包含回滚片段,并在变更记录中留存变更前后证据。

审查清单与反模式

审查清单包括:脚本是否指明明确的清单来源;凭据是否不出现在源码、日志与异常信息中;是否设置 conn_timeout、auth_timeout 与命令 read_timeout;失败是否按设备报告而不中断整批;是否避免大范围扫描与无界并发;配置变更是否置于干跑或显式操作标志之后;save_config() 是否与初次推送分离并绑定验证。反模式包括:在源码中硬编码密码、enable secret 或私钥;将配置命令作为默认代码路径;对整个 CIDR 网段而非经审查的清单运行自动化;未经清理就把完整 running-config 记录到共享系统;把解析成功当作设备状态正确的证据。

适用场景

适合网络运维与自动化开发人员在编写只读采集脚本、批量审计脚本、结构化解析流程或受控配置变更脚本时参考,也适合在自动化脚本接触生产设备前进行代码审查。

限制

资料未提供该技能的具体安装方式、平台要求、收费信息或实际运行效果验证;示例中的具体超时值、并发数等参数为示例设定,需结合真实环境评估。相关延伸技能包括 cisco-ios-patterns、network-config-validation 和 network-interface-health。