You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Netmiko适配Avocent ACS系列控制台服务器的提示符匹配问题

问题分析与解决方案

你的问题根源在于Netmiko的Linux设备类默认只认以#或$结尾的提示符,但Avocent ACS的提示符是--:- / cli->,导致读取超时。而且你误解了set_base_prompt的alt_prompt_terminator参数的作用:它只是用来从已匹配到的提示符中提取基础前缀(比如从--:- / cli->里抠出--:- / cli作为后续命令的截断标识),但函数执行时第一步还是会用默认的[\$#]正则去读取设备输出,所以依然会超时。

可行解决方案

方案1:提前修改提示符匹配规则

在建立连接前,直接修改Netmiko会话的prompt_pattern为匹配>`的正则,这样后续所有读取提示符的操作都会用新规则:

from netmiko import ConnectHandler
from cfslibconfig import CfsLibConfig

def get_session(config):
    device= {
        "host": config.get_config_key('console_host'),
        "username": config.get_config_key('console_username'),
        "password": config.get_config_key('console_password'),
        "device_type": "linux",
        "session_log": "netmiko_session.log",
        "auto_connect": False
    }
    session = ConnectHandler(**device)
    # 替换默认提示符正则,匹配以>结尾的内容
    session.prompt_pattern = r'>\s*$'
    # 现在建立连接,会正确识别设备提示符
    session.establish_connection()
    # 提取基础提示符,用alt_prompt_terminator指定终止符
    session.set_base_prompt(alt_prompt_terminator=">")
    return session

方案2:自定义设备类(更规范)

创建继承自Linux设备类的自定义类,固化提示符匹配规则,后续直接用这个自定义设备类型:

from netmiko import ConnectHandler
from netmiko.linux.linux_ssh import LinuxSSH
from cfslibconfig import CfsLibConfig

# 自定义Avocent ACS设备处理类
class AvocentACSSSH(LinuxSSH):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 默认匹配以>结尾的提示符
        self.prompt_pattern = r'>\s*$'

def get_session(config):
    device= {
        "host": config.get_config_key('console_host'),
        "username": config.get_config_key('console_username'),
        "password": config.get_config_key('console_password'),
        # 使用自定义设备类
        "device_type": AvocentACSSSH,
        "session_log": "netmiko_session.log",
        "auto_connect": False
    }
    session = ConnectHandler(**device)
    session.establish_connection()
    session.set_base_prompt(alt_prompt_terminator=">")
    return session

为什么之前的代码失效

你之前先调用establish_connection,此时Netmiko已经在等待默认的#/$提示符,而设备返回的是>结尾的内容,所以直接超时。alt_prompt_terminator`参数只是处理已读取到的提示符内容,无法修改Netmiko用来匹配设备输出的底层正则,因此解决不了初始的匹配问题。

内容的提问来源于stack exchange,提问作者Bery Purda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:06:29