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

Python代码在Python Shell正常但VSCode中连接Juniper设备触发NetmikoTimeoutException

解决Netmiko连接Juniper设备在VSCode中超时的问题

问题场景

我使用以下代码连接Juniper设备:

virtual_srx = { 
    'device_type': 'juniper', 
    'host':   '192.168.0.140', 
    'username': 'root', 
    'password': 'Aa123456', 
    'secret': '', 
    'port' : 22, 
}
ssh = ConnectHandler(**virtual_srx)

这段代码在Python Shell中运行完全正常,但在VSCode中执行时触发NetmikoTimeoutException,错误栈如下:

Traceback (most recent call last):
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/paramiko/channel.py", line 699, in recv
    out = self.in_buffer.read(nbytes, self.timeout)
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/paramiko/buffered_pipe.py", line 164, in read
    raise PipeTimeout()
paramiko.buffered_pipe.PipeTimeout

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 573, in _read_channel_expect
    new_data = self.remote_conn.recv(MAX_BUFFER)
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/paramiko/channel.py", line 701, in recv
    raise socket.timeout()
socket.timeout

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/ssh_dispatcher.py", line 326, in ConnectHandler
    return ConnectionClass(*args, **kwargs)
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/juniper/juniper.py", line 20, in __init__
    return super().__init__(*args, **kwargs)
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 350, in __init__
    self._open()
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 356, in _open
    self._try_session_preparation()
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 792, in _try_session_preparation
    self.session_preparation()
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/juniper/juniper.py", line 26, in session_preparation
    self.set_terminal_width(command=cmd, pattern=r"Screen width set to")
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 1131, in set_terminal_width
    output = self.read_until_pattern(pattern=pattern)
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 655, in read_until_pattern
    return self._read_channel_expect(*args, **kwargs)
  File "/home/ubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/netmiko/base_connection.py", line 583, in _read_channel_expect
    raise NetmikoTimeoutException(
netmiko.ssh_exception.NetmikoTimeoutException: Timed-out reading channel, data not available.

已确认设备IP可正常ping通,且VSCode中用Netmiko连接其他设备无异常。


解决思路

从错误栈可以看出,问题出在会话准备阶段的终端宽度设置步骤,结合VSCode与Python Shell的环境差异,可尝试以下方案:

  • 延长超时时间
    VSCode终端的交互响应速度可能慢于Python Shell,给Netmiko增加超时参数:

    virtual_srx = { 
        'device_type': 'juniper', 
        'host':   '192.168.0.140', 
        'username': 'root', 
        'password': 'Aa123456', 
        'secret': '', 
        'port' : 22, 
        'timeout': 60,  # 从默认10秒延长至60秒
        'session_timeout': 60
    }
    
  • 跳过终端宽度设置
    部分Juniper设备不会返回Netmiko预期的"Screen width set to"字符串,可自定义连接类跳过该步骤:

    from netmiko.juniper.juniper import JuniperSSH
    
    class CustomJuniperSSH(JuniperSSH):
        def session_preparation(self):
            self._test_channel_read()
            self.set_base_prompt()
            # 注释掉原有的终端宽度设置逻辑
            # self.set_terminal_width(command=cmd, pattern=r"Screen width set to")
            self.disable_paging()
    
    # 使用自定义类建立连接
    ssh = CustomJuniperSSH(**virtual_srx)
    
  • 检查VSCode终端环境
    尝试切换VSCode的终端类型(如从bash切换到zsh,或使用集成终端替代外部终端),也可关闭命令执行结果验证:

    virtual_srx['global_cmd_verify'] = False
    
  • 手动验证SSH交互
    在VSCode终端中执行ssh root@192.168.0.140,检查是否有首次连接的密钥确认、自定义横幅等额外交互,这类场景可通过增加banner_timeout参数或提前处理密钥解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:10:13