使用python3.7和netmiko 3.4.0。我试图连接到Linux 18服务器。我看到Netmiko可以ssh登录,但是之后它失败了,错误如下所示。这使用的是“device_type=linux”。如果我使用'device_type=generic‘,我看不到这个错误,但是file_transfer不支持这个设备类型,这需要'linux’。
总之,当使用设备类型'linux‘建立连接时,netmiko抛出以下错误:
user_id@my-host-name ~ >
DEBUG:netmiko:Clear buffer detects data in the channel
DEBUG:netmiko:read_channel:
DEBUG:netmiko:[find_prompt()]: prompt is user_id@my-host-name ~ >
DEBUG:netmiko:read_channel:
DEBUG:netmiko:write_channel: b'\n'
user_id@my-host-name ~ >
DEBUG:netmiko:read_channel:
DEBUG:netmiko:[find_prompt()]: prompt is user_id@my-host-name ~ >
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:Pattern is:
user_id@my-host-name ~ >
user_id@my-host-name ~ >
DEBUG:netmiko:write_channel: b'exit\n'
DEBUG:paramiko.transport:EOF in transport thread
ERROR:root:Error when attempting to connect with SSH: Router prompt not found: 'user_id@my-host-name ~ >'
为什么Netmiko失败了,因为它已经成功地建立了SSH连接?有什么工作可以避免这种失败吗?
发布于 2022-01-18 23:16:59
经过进一步的调试,我想我找到了根本原因。
结尾
LINUX_PROMPT_PRI = os.getenv("NETMIKO_LINUX_PROMPT_PRI", "$")
LINUX_PROMPT_ALT = os.getenv("NETMIKO_LINUX_PROMPT_ALT", "#")
LINUX_PROMPT_ROOT = os.getenv("NETMIKO_LINUX_PROMPT_ROOT", "#")
因此,
ConnectHandler(**parameters)
。establish_connection()
set_base_prompt(alt_prompt_terminator='>')
参数包含'auto_connect':False
发布于 2022-01-16 13:08:54
Netmiko是通过屏幕抓取来工作的。这意味着,如果返回提示符,它就知道它已经完成了命令的执行。如果您更改了提示符,Netmiko将不知道您的命令是否完成,并且可能会超时。
DEBUG:netmiko:write_channel: B‘出口\n’
可能会改变提示。如果使用send_command
,可以添加expect_string
参数:
https://ktbyers.github.io/netmiko/docs/netmiko/index.html#netmiko.BaseConnection.send_command
https://stackoverflow.com/questions/70716949
复制相似问题