如何通过控制台端口使Junos PyEZ工作?

时间:2016-11-08 17:49:05

标签: python pyez

我正在努力使Junos PyEZ通过控制台端口工作(telnet到Cisco AS2511-RJ终端服务器,它连接到Juniper SRX-240控制台端口)。

测试脚本是

dev = Device(host='X.X.X.X', user='XXX', password='XXXXXXXX',
    mode='telnet', port='2014', gather_facts=True)
try:
    dev.open()
    print(dev.facts)
    print(dev.cli("show version", format='text', warning=False))
except RuntimeError as rte:
    print("Exception: " + str(rte) )
finally:
    dev.close()

我的问题是脚本不时有效,但大多数运行都不成功。尝试失败后,在日志中我看到类似

的内容
Nov  8 21:17:29  srxD-2 login: Login attempt for user <close-session/> from host [unknown]
Nov  8 21:17:29  srxD-2 login[39846]: LOGIN_PAM_AUTHENTICATION_ERROR: Failed password for user <close-session/>
Nov  8 21:17:29  srxD-2 login[39846]: LOGIN_FAILED: Login failed for user <close-session/> from host ttyu0
...........
    Nov  8 21:22:41  srxD-2 login: Login attempt for user d-trailer from host [unknown]
...........

所以PyEZ似乎并不总能很好地处理我的控制台的屏幕抓取。任何想法为什么会这样,以及如何解决它?我正在使用github的PyEZ当前主分支进行测试。

2 个答案:

答案 0 :(得分:1)

您是否可以将脚本更改为使用python context manager,如下所示(这将关闭连接)?如果连接未正确关闭,则使用控制台连接(屏幕抓取),下次脚本可能会出现问题。

with Device(host='X.X.X.X', user='XXX', password='XXXXXXXX',
    mode='telnet', port='2014', gather_facts=True) as dev:
    print(dev.facts)
    print(dev.cli("show version", format='text', warning=False))

您可以分享日志来自何处的详细信息,因为这些不是来自PyEZ吗?

答案 1 :(得分:1)

这已通过添加console_has_banner=True选项修复,如下所示:

with Device(host='X.X.X.X', user='XXX', password='XXXXXX', mode='telnet', 
        port='2014', gather_facts=True, console_has_banner=True) as dev:
    print(dev.facts)
    print(dev.cli("show version", format='text', warning=False))

应用此选项后,脚本现在每次都能正常工作。

查看更多详情in this pull request