Netmiko连接Arista EOS设备报netmiko.exceptions.ReadTimeout错误
Netmiko连接Arista vEOS触发
Width set to匹配读超时修复方案 问题定位结论
22端口telnet连通正常可排除网络层、SSH端口监听异常问题,报错根因为Netmiko会话初始化阶段执行终端宽度设置命令后,未匹配到内置规则预期的Width set to返回字符串,触发读超时。该问题通常由三类原因导致:
- vEOS版本差异,CLI返回的操作提示和Netmiko内置适配规则不匹配
- 设备登录后存在额外交互内容(欢迎横幅、首次登录改密提示、配置向导等)
- 设备CPU负载高,命令响应速度超过默认读超时时长
排查步骤
- 优先开启Netmiko会话日志,记录完整SSH交互过程,避免盲目调参。在设备连接配置字典中加入日志配置项:
arista_vEOS = { 'device_type': 'arista_eos', 'ip': '192.168.12.12', 'username': 'asasasa', 'password': 'ddasasas', 'session_log': 'netmiko_session.log' }
执行一次脚本后查看netmiko_session.log,即可看到Netmiko发送终端宽度设置命令后设备返回的完整内容,直接定位是返回提示不匹配、存在额外登录提示、还是设备无响应。
2. 手动通过原生SSH客户端连接目标vEOS,登录后手动执行terminal width 511(即Netmiko默认发送的终端宽度设置命令),确认设备返回内容,排除设备卡在初始化配置向导、用户权限不足无法执行命令的问题。
对应修复方案
- 若为设备响应慢导致超时:在连接配置中加入
'read_timeout': 60,将默认读超时从10秒调整为60秒即可。 - 若为设备返回的宽度设置提示和默认
Width set to规则不匹配:在连接配置中加入'disable_set_terminal_width': True,直接跳过终端宽度设置步骤,该操作不影响绝大多数场景下的命令执行、结果返回逻辑,是兼容性最好的快速修复方案。 - 若日志显示登录后存在欢迎横幅、首次登录改密提示、MFA验证等额外交互:先在vEOS侧关闭非必要的登录横幅、首次登录强制改密配置,确保登录后直接进入用户/特权模式提示符。
- 若使用的vEOS版本较老(4.20以前版本),可尝试将
fast_cli参数设置为False,关闭Netmiko的快速CLI交互模式,兼容老版本设备的慢响应逻辑。
脚本问题修正
原脚本存在两处逻辑/语法笔误,可一并调整:
- 打印顺序错误:
ConnectHandler调用时就会发起连接,原写法在连接建立失败时不会输出连接尝试提示,需将连接尝试提示调整到ConnectHandler调用前。 - 命令与提示不匹配:打印提示为
Show IP Interfaces:但实际执行的是日志查询命令,且EOS上查询最近10条日志的标准语法为show logging last 10,原show log 10写法在部分版本上会返回语法错误。
修正后的可运行参考代码:
from netmiko import ConnectHandler arista_vEOS = { 'device_type': 'arista_eos', 'ip': '192.168.12.12', 'username': 'asasasa', 'password': 'ddasasas', 'read_timeout': 60, 'session_log': 'netmiko_session.log', 'disable_set_terminal_width': True } print(f'----- Trying to establish a SSH connection with {arista_vEOS["ip"]}... -----') net_connect = ConnectHandler(**arista_vEOS) print('SSH connection successfully created!') output = net_connect.send_command('show logging last 10') print('Recent 10 device logs:') print(output)
内容的提问来源于stack exchange,提问作者Arulvelu
相关产品推荐
相关产品推荐

