尝试通过pexpecttelnet连接到网络设备时,获得身份验证失败错误

问题描述

用于连接设备并获取设备详细信息的python代码运行正常,突然抛出了身份验证失败错误,并提供了以下错误日志。

15:30:18.786    INFO    Trying 192.168.43.121...
                        Connected   
15:30:18.786    INFO    Seen connected word 
15:30:18.786    INFO    Trying 192.168.43.121...
                        Connected   
15:30:18.787    INFO     to 192.168.43.121.
                        Escape character is '^]'.


                        User Access Verification

                        Username:   
15:30:18.787    INFO    Seen Username prompt XXadminXX  
15:30:18.787    INFO     to 192.168.43.121.
                        Escape character is '^]'.


                        User Access Verification

                        Username:   
15:30:18.988    INFO     
                        Username:   
15:30:18.988    INFO    Seen Username prompt XXadminXX  
15:30:18.988    INFO     
                        Username:   
15:30:19.007    INFO     admin
                        Password:   
15:30:19.008    INFO    Seen Password prompt XLoginDevice1XX    
15:30:19.008    INFO     admin
                        Password:   
15:30:23.027    INFO     

                         % Authentication failed

                        Username:   
15:30:23.027    INFO    Seen Username prompt XXadminXX  
15:30:23.028    INFO     

                        % Authentication failed

                        Username:   
15:30:23.050    INFO     LoginDevice1
                        Password:   
15:30:23.050    INFO    Seen Password prompt XXLoginDevice1XX   
15:30:23.050    INFO     LoginDevice1
                        Password:   
15:30:29.158    INFO    Connect Telnet error : End Of File (EOF). Exception style platform.
<pexpect.pty_spawn.spawn object at 0x7f25e70e7d30>
command: /usr/bin/telnet
args: [b'/usr/bin/telnet',b'92.168.43.121']
buffer (last 100 chars): ''
before (last 100 chars): ' \r\n\r\n% Authentication failed\r\nConnection closed by foreign host.\r\r\n'
after: <class 'pexpect.exceptions.EOF'>
match: None
match_index: None
exitstatus: 1
flag_eof: True
pid: 29737
child_fd: 8
closed: False
timeout: 30
delimiter: <class 'pexpect.exceptions.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: None
delayafterclose: 0.1
delayafterterminate: 0.1

如果我尝试通过使用腻子提供用户名/密码来手动登录,则可以正常工作。下面的代码段涉及通过telnet连接到设备。

代码段:

patternList = ['Username:','Password:','.*\-[0-9]+>','.*\-?[0-9]+#','Connected','.*config.*#','.*login:']
       session = pexpect.spawn('telnet {}'.format(self.IP),encoding='utf-8',codec_errors='ignore')
       cpl = session.compile_pattern_list(patternList)
       while True:
           i = session.expect_list(cpl)
           out = session.before + session.after
           log.info(out)
           if i == 0:
              log.info("Seen Username prompt XX%sXX"%User,also_console=True)
              session.sendline(User)
              out = session.before + session.after
              log.info(out)
           elif i == 1:
              log.info("Seen Password prompt XX%sXX"%Passwd,also_console=True)
              session.sendline(Passwd)
              out = session.before + session.after
              log.info(out)
           elif i == 2:
              log.info("seen > prompt",also_console=True)
              session.sendline('enable')
              out = session.before + session.after
              log.info(out)
           elif i == 3:
              log.info("Prompt seen")
              out = session.before + session.after
              log.info(out)
              break
           elif i == 4:
              log.info("Seen connected word",also_console=True)
              session.sendline('')
              out = session.before + session.after
              log.info(out)
           elif i == 5:
              session.sendline('end')   
              out = session.before + session.after
              log.info(out)
           elif i == 6:
              log.info("Seen Login prompt XX%sXX"%User,also_console=True)
              session.sendline(User)
              out = session.before + session.after
              log.info(out)
       session.sendline('terminal length 0')
       session.expect('#')
       out = session.before + session.after
       log.info(out)
       session.sendline('show version')
       session.expect('#')
       out = session.before + session.after
       log.info(out)
       log.info("Login success",also_console=True)
       log.info(session.before + session.after)
       return session

如何解决此问题?

谢谢, 莫汉

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...