Python使用Netmiko配置3台思科路由器环回口触发超时错误求助
问题排查及解决方案
根因分析
你遇到的NetmikoTimeoutException报错主要由以下几个代码逻辑问题导致:
- 最核心的错误:
send_config_set()方法要求传入配置命令列表,你直接传入了带换行符的字符串,Netmiko无法逐行匹配设备返回的配置提示符,最终读取超时 - 冗余循环逻辑:你把单个设备字典嵌套进了列表又做了一层循环,属于无效逻辑,也可能增加连接异常概率
- 缺少必要的连接收尾操作:配置完成后没有退出配置模式、断开SSH连接,可能导致设备侧会话卡住
- 默认超时时间太短:如果设备响应慢,默认的超时阈值无法覆盖配置交互时间
修复后可用代码
from netmiko import ConnectHandler # 可根据实际情况调整超时时间,如果有enable密码就添加secret参数 base_router_params = { 'device_type': 'cisco_ios', 'username': 'cisco', 'password': 'cisco', 'timeout': 20, # 'secret': '你的enable密码' 如果需要进入特权模式就取消注释修改密码 } for i, n in enumerate(range(177, 180), start=1): host = f"192.168.122.{n}" router_params = base_router_params.copy() router_params['ip'] = host # 建立连接 net_connect = ConnectHandler(**router_params) # 如果需要进入特权模式就取消下一行注释 # net_connect.enable() # 构造配置命令列表 config_cmds = [ f"int lo{i}", f"ip address {i}.{i}.{i}.{i} 255.255.255.255" ] # 下发配置 output = net_connect.send_config_set(config_cmds) # 保存配置 可选,需要的话取消注释 # net_connect.send_command("write memory") # 断开连接 net_connect.disconnect() print(f"Router {host} 已完成loopback{i}配置")
验证排查步骤
如果修改后仍有报错,按以下顺序排查:
- 手动通过SSH登录对应路由器IP,确认账号密码有效、可以正常进入全局配置模式
- 确认路由器SSH配置正常,没有配置ACL限制本机IP访问
- 如果设备响应较慢,可以把
timeout参数调整到30以上
内容的提问来源于stack exchange,提问作者nagasheshu
相关产品推荐
相关产品推荐

