netmiko比裸paramiko更适合设备备份,因其内置厂商专属行为模板,自动处理enable、分页(如terminal length 0)、--more--暂停及提示符识别,避免手动管理回车、超时、命令截断等问题。

能用 paramiko 或 netmiko 实现,但直接写裸 SSH 容易卡在认证、分页、超时上——关键不是“能不能连”,而是“连上之后怎么稳稳拿到完整配置”。
为什么 netmiko 比裸 paramiko 更适合设备备份
裸 paramiko 要自己处理回车换行、等待提示符、清除分页(如 Cisco 的 terminal length 0)、识别登录失败还是密码错,稍有延迟就收不全配置。而 netmiko 内置了针对各厂商的 device_type 行为模板,比如自动发 enable、自动处理 --More--、默认启用 fast_cli=False 防止命令被吞。
实操建议:
- 优先装
netmiko:pip install netmiko,别从 paramiko 重造轮子 - 设备类型必须写对:
cisco_ios、huawei、juniper、arista_eos,写成cisco或ios会报KeyError - 如果设备启用了 SSHv1 或弱加密算法(老款 H3C/锐捷),可能需加
ssh_config_file指定兼容配置
如何避免备份时被分页截断或超时中断
多数网络设备默认开启分页,且空闲超时短(常见 5 分钟)。不干预的话,脚本可能只拿到前几屏,或者连到一半被踢下线。
实操建议:
- 登录后立刻执行分页关闭命令:对 Cisco/Huawei 用
send_command("terminal length 0"),对 Juniper 用send_command("set cli screen-length 0") - 增大超时参数:
timeout=15(连接)、session_timeout=90(交互会话)、read_timeout=10(单次读取) - 禁用 fast_cli:
fast_cli=False,否则多行命令(如show run)可能被压缩成一行返回 - 对华为设备,记得在
send_command后加strip_prompt=False, strip_command=False,否则配置里的[HUAWEI]提示符会被误删
如何安全存配置并区分多台设备
把所有配置 dump 到一个文件里毫无意义;没时间戳、没设备标识、没校验,出问题根本没法回溯。
实操建议:
- 文件名必须含设备标识:
f"{device['host']}_{device['device_type']}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.cfg" - 每份备份开头追加元信息注释:
"# BACKUP_TIME: {now}\n# DEVICE: {host}\n# TYPE: {device_type}\n\n" - 保存前做基础校验:检查返回内容是否含
"Invalid input"、"% Invalid"或长度字符(大概率是命令失败) - 敏感信息脱敏可后置:先存原始配置,再用正则批量替换
password \d+ \S+或snmp-server community \S+,别在连接时就过滤——有些设备命令本身要带密文才能生效
真正难的不是连上十台设备,而是某台设备恰好在你备份时 reload 了、ACL 拦了你的源 IP、或是新固件改了提示符格式——所以每次备份后务必检查文件大小和末尾是否含 end 或 quit 这类终结标记,而不是只看有没有抛异常。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











