Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

使用 Junos PyEZ 访问 Junos 设备上的命令行管理程序

总结 使用 Junos PyEZ 连接到 Junos 设备上的外壳并执行命令。

StartShell 概述

Junos CLI 具有许多操作模式命令,这些命令返回的信息类似于许多 shell 命令返回的信息。因此,通常不需要访问 Junos 设备上的 UNIX 级外壳。但是,在某些情况下,用户或应用程序可能需要访问 shell 并执行 shell 命令或从 shell 执行 CLI 命令。

Junos PyEZ jnpr.junos.utils.start_shell 模块定义了 StartShell 类,使 Junos PyEZ 应用程序能够启动与 Junos 设备的 SSH 连接并访问外壳。这些 StartShell 方法使应用程序随后能够通过连接执行命令并检索响应。

StartShell open()close()方法建立并终止与设备的 SSH 连接。因此,如果客户端应用程序只需要访问 shell,则可以省略对 and Device open() close() 方法的调用。

在 Junos PyEZ 版本 2.6.7 及更低版本中, StartShell 实例连接到默认 SSH 端口 22。从 Junos PyEZ 版本 2.6.8 开始, StartShell 实例将连接到实例中 Device 定义的同一端口,但以下情况除外,其中 shell 连接仍使用端口 22:

  • Devicehost设置为“本地主机”

  • Deviceport设置为 830。

  • Deviceport未定义。

从命令行管理程序执行命令

该方法StartShell run() 执行 shell 命令并等待响应。默认情况下,该方法在返回命令输出之前等待默认 shell 提示之一(%、#、> 或 $)。或者,可以将参数设置为this="string"特定字符串,该方法在返回命令输出之前等待预期的字符串或模式。

返回值是一个元组。第一项是 True 退出代码是否为 0, False 否则。第二项是命令的输出。

以下示例连接到主机并从 shell 执行两个操作模式命令。脚本首先执行 request support information 命令并将输出保存到文件中。然后,脚本执行 show version 命令,将输出存储在变量中 version ,然后打印变量的内容。

返回的元组包括与命令的退出代码和命令的 show version 命令输出相对应的布尔值。为简洁起见,此示例中的输出被截断。

类的StartShell实例也可以用作上下文管理器。在这种情况下,不需要显式调用StartShellopen()close()方法。例如:

如何指定外壳类型

从 Junos PyEZ 2.6.4 版开始, StartShell 支持 shell_type 远程脚本中的参数以指定外壳类型。 StartShell 支持以下外壳类型:

  • C 壳 (csh)

  • 伯恩式贝壳(白蜡木)

默认情况下, StartShell 实例的类型为 C 外壳 (csh)。您还可以指定 shell_type="sh" 启动 Bourne 样式的外壳(灰)。例如:

如何指定超时

您可以包含参数来StartShelltimeout指定实用程序在超时之前必须等待预期字符串或模式的持续时间(以秒为单位)。如果未指定超时,则默认值为 30 秒。

预期的字符串是在参数中 this 定义的值。如果未定义 this,则预期的字符串是默认的 shell 提示符之一。如果改为设置特殊值 this=None,则设备在捕获命令输出之前会等待超时的持续时间,如 执行不返回的 Shell 命令中所述。

如何错开命令执行

有时,您可能希望执行或循环对该方法的 run() 多个调用。为了帮助稳定输出,可以指定 sleep 参数。该 sleep 参数指示设备在从缓冲区接收数据之前等待指定的秒数。您可以将亚秒精度定义为 sleep 浮点数。

执行不返回的外壳命令

在某些情况下,您可能需要执行不返回的 shell 命令,例如 monitor traffic 显示在本地路由引擎上发起或终止的信息流的命令。在 Junos CLI 中,命令会 monitor traffic 实时显示信息,直到用户发送 Ctrl+c 键盘序列来停止数据包捕获。

您可以通过包含参数this=None来使用该方法执行不返回的 shell 命令。StartShell run()包含this=None参数时,该方法会等到指定的超时值,以检索并返回 shell 的所有命令输出。在这种情况下,返回元组的第一项是True当执行的 shell 命令的结果返回内容时,第二项是命令输出。如果省this略参数或将其设置为等于特定字符串或模式,则当该方法在命令输出中遇到默认提示符或指定的字符串模式时,该方法可能会返回非返回命令的部分输出。

下面的示例代码执行 monitor traffic interface fxp0 命令,等待 15 秒,然后检索并返回命令输出。

更改历史记录表

功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。

释放
描述
2.6.8
从 Junos PyEZ 2.6.8 版开始, StartShell 实例将连接到实例中 Device 定义的同一端口,但主机设置为 localhost 或端口为 830 或未定义的情况除外。