Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

示例:为脚本内的连接指定会话协议

以下示例演示如何在创建与远程设备的连接时在 Junos 自动化脚本中指定会话协议。具体来说,示例 操作脚本 会与运行 Junos OS 的远程设备建立 NETCONF 会话,检索和打印 NETCONF 服务器功能,然后在该设备上更新并提交配置。

要求

  • 运行 Junos OS 11.4 或更高版本的路由、交换或安全设备。

  • 客户端应用程序可以登录到 NETCONF 服务器所在的设备。

  • NETCONF 服务器所在设备上启用了 通过 SSH 的 NETCONF 服务。

概述和脚本

扩展 jcs:open() 功能包括以下选项:在运行 Junos OS 的设备上与 Junos XML 协议服务器创建会话,或者在启用了通过 SSH 提供 NETCONF 服务的设备上与 NETCONF 服务器创建会话。在以下示例中,该脚本会创建连接并与运行 Junos OS 的远程设备建立 NETCONF 会话。如果成功建立了连接和会话,则脚本会更新远程设备上的配置,以便将 ftp 语句添加到 [edit system services] 层次结构级别。该脚本还会检索和打印会话协议以及 NETCONF 服务器的功能。

脚本会采用一个参数, remote-host即远程设备的 IP 地址或主机名。该 arguments 变量在脚本的全局级别进行声明,以便在用户需要 上下文相关帮助时,参数名称和说明在命令行界面 (CLI) 中可见。

该变量 netconf 是一个节点集,用于为远程设备指定会话协议和连接参数。元素的值 <method> 设置为“netconf”,以通过 SSHv2 连接与 NETCONF 服务器建立会话。该 <username> 元素用于指定连接的用户名。如果未指定用户名,并且是连接所需的用户名,则脚本将使用执行脚本的用户的本地名称。在此示例中,未指定密码和端口。如果身份验证需要密码,则远程设备应在脚本执行期间提示输入密码。该脚本使用默认的 NETCONF 端口 830 建立会话。

如果连接和建立 NETCONF 会话成功,则脚本将执行远程过程调用 (RPC)。RPC 包含标记元素 <lock><edit-config><commit><unlock>,这些是 NETCONF 操作,用于锁定、编辑、提交和解锁 候选配置。该脚本将每个任务的 RPC 存储在一个单独的变量中。每个 RPC 的结果也会单独存储,并解析错误。只有在上一步成功的情况下,脚本才会执行每个后续步骤。例如,如果脚本无法锁定配置,则不会执行 RPC 来编辑、提交或解锁配置。

该变量 rpc-edit-config 包含标记元素 <edit-config>,这是修改配置的 NETCONF 操作。子元素 <config>包括与设备上的候选配置合并的配置的修改部分。如果遇到错误,则脚本会调用语句 copy-of ,将结果树分片变量复制到结果树,以便在脚本执行期间将错误消息打印到 CLI。

SLAX 语法

XSLT 语法

配置

程序

逐步过程

要下载、启用和测试脚本:

  1. 将 XSLT 或 SLAX 脚本复制到文本文件中,根据需要将文件命名 为 netconf-session.xslnetconf-session.slax ,并将其复制到设备上的 /var/db/script/op/ 目录中。

  2. 在配置模式下,在层次结构级别包括语句[edit system scripts op],并根据需要将 netconf-session.xslnetconf-session.slax 包含在file内。

  3. commit and-quit发出命令。

  4. 通过发出 op netconf-session 操作模式命令在本地设备上执行 op 脚本,并包括任何必要的参数。

    在此示例中,用户 bsmith 正在连接到远程设备(五星)。远程设备具有双路由引擎,因此操作 commit 会返回一个警告,即 commit synchronize 应使用命令向两个路由引擎提交新的候选配置。

验证

确认设备工作正常。

验证操作脚本执行

目的

验证脚本是否按预期运行。

行动

查看 CLI 和操作脚本日志文件中的脚本输出。特别注意在执行过程中发生的任何错误。默认的 op 脚本日志文件为 /var/log/op-script.log。如果日志文件很长,请通过将选项追加 | last number-of-lines 到命令并指定要打印到 CLI 的行数来 show log 限制显示。元素内的 <op-script-results> 输出与脚本执行相关。

在执行操作脚本时包含 | display xml 选项,您还可以在运行 Junos OS 的设备上获取更具描述性的脚本输出。

意义

此示例将在运行 Junos OS 的远程设备上创建一个 NETCONF 会话。NETCONF 服务器的功能包括标准 NETCONF 操作和瞻博网络的专有扩展,这些扩展在和http://xml.juniper.net/dmi/system/1.0 中http://xml.juniper.net/netconf/junos/1.0定义。操作的 commit RPC 结果包括一个警告,但提交操作仍然成功。

验证配置更改

目的

查看远程设备上的配置更改和提交日志,验证提交是否成功。

行动

在远程设备上,执行 show configuration system services 操作模式命令以查看 [edit system services] 配置的层级。如果脚本成功,则配置将包含语句 ftp

此外,您还可以查看提交日志。在远程设备上,执行 show system commit 操作模式命令以查看提交日志。在此示例中,日志确认在给定日期和时间在 NETCONF 会话中提交候选配置。

故障 排除

连接错误的故障排除

问题

该脚本将生成以下错误消息:

连接错误的潜在原因包括:

  • 要连接的设备或接口已关闭或不可用。

  • 远程设备的 IP 地址或 DNS 名称的脚本参数不正确。

  • 建立连接之前,超过了连接超时值。

  • 远程设备的用户身份验证无效或输入不正确。

  • 您尝试建立 NETCONF 会话,NETCONF on SSH 未在 NETCONF 服务器所在的设备上启用,或者其他端口上未启用 NETCONF。

解决 方案

确保远程设备已启动并运行,并且用户能够访问该设备。还要验证在执行脚本时,是否为远程设备的 IP 地址或 DNS 名称提供了正确的参数。

对于 NETCONF 会话,请确保在 NETCONF 服务器所在的设备上通过 SSH 启用了 NETCONF。由于示例程序没有为 NETCONF 会话指定特定的端口号,因此会话在默认的 NETCONF-over-SSH 端口 830 上建立。要验证在运行 Junos OS 的设备的默认端口上是否启用了基于 SSH 的 NETCONF,请在远程设备上输入以下操作模式命令:

netconf如果远程设备上没有配置层次结构,在配置模式下发出以下语句,以在默认端口上通过 SSH 启用 NETCONF:

netconf如果配置层次结构指定了默认端口以外的端口,请将端口号包含在您传递到函数的 jcs:open() XML 节点集中。例如,为端口 12345 上的 SSH 上的 NETCONF 配置了以下设备:

要对备用端口创建 NETCONF 会话,请将新端口号包含在 XML 节点集中。

对配置锁定错误进行故障排除

问题

该脚本会生成以下其中一条错误消息:

解决 方案

另一个用户当前已锁定候选配置,或者已修改候选配置,但尚未提交此配置。等待锁释放,然后执行程序。

对配置语法错误进行故障排除

问题

以下错误消息会打印到 CLI:

检查结果树,了解更多信息。在这种情况下,结果树将显示以下错误消息:

解决 方案

<bad-element>标记元素表示配置语句无效。更正配置层次结构并运行脚本。在此示例错误中,用户输入了标记<ftp2>,而不是<ftp>。由于这不是配置中可接受的元素,NETCONF 服务器会返回错误。