了解自动化脚本中的会话协议
Junos XML 管理协议是一种瞻博网络专有协议,用于向运行 Junos OS 的设备请求信息并对其进行配置。NETCONF XML 管理协议是一种标准,用于请求和更改路由、交换或安全设备上的配置信息。NETCONF 协议在 RFC 6241( NETCONF 配置协议)中定义, http://www.ietf.org/rfc/rfc6241.txt 。
SLAX jcs:open() 和 XSLT 脚本中用于与设备建立连接的功能包括:在运行 Junos OS 的设备上与 Junos XML 协议服务器创建会话,或者在启用了 SSH NETCONF 服务的设备上与 NETCONF 服务器创建会话。在 Junos OS 11.4 版之前,该功能仅支持在运行 Junos OS 的设备上与 Junos XML 协议服务器的会话。对 NETCONF 会话的额外支持使自动化脚本能够在多供应商环境中配置和管理设备。
该功能 jcs:open() 支持以下会话协议类型:
junoscript- 在路由、交换或运行 Junos OS 的安全设备上与 Junos XML 协议服务器会话。此会话类型支持在 Junos XML 协议和 Junos XML API 中定义的操作,后者用于配置运行 Junos OS 的设备或请求有关设备配置或操作的信息。这是默认会话类型。netconf— 通过 SSHv2 连接在路由、交换或安全设备上与 NETCONF XML 协议服务器的会话。所连接的设备必须启用通过 SSH 实现 NETCONF 服务。 RFC 4742《 使用基于安全 SHell 的 NETCONF 配置协议 (SSH)》介绍了通过 SSH 的 NETCONF( http://www.ietf.org/rfc/rfc4742.txt 。junos-netconf— 通过路由、交换或运行 Junos OS 的安全设备上的 SSHv2 连接与 NETCONF XML 协议服务器的专有会话。
运行 Junos OS 的设备上的 NETCONF 服务器具有在中 http://xml.juniper.net/netconf/junos/1.0 定义的附加功能。这些设备上的 NETCONF 服务器支持 NETCONF XML 协议操作、大多数 Junos XML 协议操作以及 Junos XML API 中定义的标记元素。对于 netconf 运行 Junos OS 的设备及其 junos-netconf 会话,应仅使用本机 NETCONF XML 协议操作和 Junos XML 协议中提供的扩展来配置功能,如 NETCONF XML 管理协议开发人员指南中记录的那样。
指定会话协议时的功能语法 jcs:open() 为:
SLAX 语法
var $connection = jcs:open(remote-hostname, session-options);
XSLT 语法
<xsl:variable name="connection" select="jcs:open(remote-hostname, session-options)"/>
参数 session-options 是用于指定会话类型和连接参数的 XML 节点集。会话类型是三个值之一: junoscript、 netconf或 junos-netconf。如果未指定会话类型,则默认为 junoscript,将在运行 Junos OS 的设备上使用 Junos XML 协议服务器打开会话。节点集的格式为:
var $session-options := {
<method> ("junoscript" | "netconf" | "junos-netconf");
<username> "username";
<passphrase> "passphrase";
<password> "password";
<port> "port-number";
<instance> "routing-instance-name";
<routing-instance> "routing-instance-name";
}
如果未指定用户名,并且是连接所需的用户名,则脚本将使用执行脚本的用户的本地名称。和<passphrase><password>元素服务于同一目的。如果未指定密码元素,并且是身份验证所需的密码元素,则您要连接的设备在执行脚本期间应提示您输入一个。
当使用 jcs:open() 该功能建立本地或远程连接时,运行 Junos OS Evolved 的设备仅支持无密码登录。它们不支持将密码作为功能参数提供,也不支持使用 Junos OS 支持的交互式密码。要实现本地或远程连接,请通过无密码登录来执行此功能,否则可能会遇到身份验证问题。
或者,您可以为netconfjunos-netconf和会话指定服务器端口号。默认 NETCONF 服务器端口号为 830。如果未为netconf或junos-netconf会话指定端口号,jcs:open()请使用端口 830 连接到 NETCONF 服务器。但是,如果指定了端口号,jcs:open()将改为连接到给定端口。指定端口号不会影响junoscript始终通过 SSH 端口 22 建立的会话。
要将 SSH 连接重定向至源自特定路由实例,请添加 instance or routing-instance 元素和路由实例名称。必须在层次结构级别配置[edit routing-instances]路由实例。使用该路由实例的路由表,或者从该路由实例下配置的某个接口访问远程设备。和instancerouting-instance元素服务于同一目的。
要验证特定连接的协议,请调用 jcs:get-protocol(connection) 扩展函数并将连接句柄作为参数传递。根据会话类型,该函数会返回“junoscript”、“netconf”或“junos-netconf”。
在与 NETCONF 服务器的会话建立期间,客户端应用程序和 NETCONF 服务器都会发出一个 <hello> 标记元素,以指定它们支持在 NETCONF 规范中定义或以专有扩展发布的操作或 功能 。在 netconf 和 junos-netconf 会话中,您可以通过调用 jcs:get-hello(connection) 扩展函数检索 NETCONF 服务器的会话功能。
例如,运行 Junos OS 的典型设备上的 NETCONF 服务器可能会返回以下功能:
<hello>
<capabilities>
<capability>urn:ietf:params:xml:ns:netconf:base:1.0</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:candidate:1.0
</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0
</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:validate:1.0
</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:url:1.0?protocol=http,ftp,file
</capability>
<capability>http://xml.juniper.net/netconf/junos/1.0</capability>
<capability>http://xml.juniper.net/dmi/system/1.0</capability>
</capabilities>
<session-id>20826</session-id>
</hello>