0

Junos PyEZ をコンソール ポート経由で動作させようとしています (Juniper SRX-240 コンソール ポートに接続されている Cisco AS2511-RJ ターミナル サーバーへの telnet)。

テストスクリプトは

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 の現在のマスター ブランチを使用しています。

4

2 に答える 2

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))

このオプションを適用すると、スクリプトは毎回正常に動作するようになりました。

詳細については、このプル リクエストを参照してください。

于 2016-11-11T17:43:06.470 に答える
1

以下に示すように、Python コンテキスト マネージャーを使用するようにスクリプトを変更できますか (これにより、接続が閉じられます)。コンソール接続 (スクリーン スクレイピング) では、接続が適切に閉じられていないと、次回スクリプトで問題が発生する可能性があります。

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 からのものではないので、ログがどこから来ているのか詳細を共有できますか?

于 2016-11-08T18:23:02.673 に答える