排除 NETCONF Java 应用程序中的例外错误
以下各节概述了在执行 NETCONF Java 工具包程序时可能遇到的例外错误。这些部分还介绍了每个错误的潜在原因和解决方案。
连接错误故障排除:插槽时间过长
问题
描述
NETCONF 例外,您看到以下错误消息:
Exception in thread "main" net.juniper.netconf.NetconfException: The connect() operation on the socket timed out. at net.juniper.netconf.Device.createNetconfSession(Device.java:344) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14)
原因
插座时间过长错误的潜在原因包括:
要连接的设备或接口已关闭或不可用。
对象参数中的 IP 地址或主机名
Device
不正确。在建立连接之前,超出了连接超时值。
解决 方案
确保设备已启动并运行。还要验证 IP 地址或主机名在程序代码构造参数 Device
中是否正确。
连接到设备的默认超时值为 5000 毫秒。要将超时值设置为更大的间隔时间以确保程序有足够时间来建立连接,请对设备对象 setTimeOut()
调用方法。以下代码将超时间隔设置为 10 秒:
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.setTimeOut(10000); device.connect();
连接错误故障排除:无连接
问题
描述
发生非法州事件例外,您看到以下错误消息:
Exception in thread "main" java.lang.IllegalStateException: Cannot execute RPC, you need to establish a connection first. at net.juniper.netconf.Device.executeRPC(Device.java:498) at GetChassisInventoryRun.main(GetChassisInventoryRun.java:15)
原因
未与远程设备建立 SSHv2 连接或 NETCONF 会话。
解决 方案
调用设备对象上的方法,以与 NETCONF 服务器运行的设备建立 connect()
SSHv2 连接和默认 NETCONF 会话。建立连接和会话后,RPC 执行应成功。
身份验证错误故障排除
问题
描述
NETCONF 例外,您看到以下错误消息:
Exception in thread "main" net.juniper.netconf.NetconfException: Authentication failed. at net.juniper.netconf.Device.createNetconfSession(Device.java:358) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14) <!-- or --> Could not connect to device:Authentication failed.
原因
认证失败错误消息有以下几个可能的原因,包括:
作为构造参数传递的主机或认证详细信息在程序代码中
Device
错误输入。对象的参数正确,但是所连接设备上没有相应的
Device
用户帐户。
解决 方案
如果要连接的设备上没有用户帐户,请创建具有相应身份验证的帐户。有关在运行 Junos OS 的设备上配置用户帐户Junos OS请参阅 路由设备的 Junos OS 和身份验证用户指南 。
如果用户帐户存在于远程设备上,但是构造参数在程序代码输入不正确,请纠正参数, Device
然后重新编译程序。
NETCONF 会话错误故障排除
问题
描述
NETCONF 例外,您看到以下错误消息:
Exception in thread "main" net.juniper.netconf.NetconfException: There was a problem while connecting to 10.10.1.1:830 at net.juniper.netconf.Device.createNetconfSession(Device.java:344) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14)
原因
NETCONF over SSH 的 NETCONF 可能未在 NETCONF 服务器所在的设备上启用,也可能在不同的端口上启用。
解决 方案
确保您在 NETCONF 服务器所在的设备上通过 SSH 启用了 NETCONF。如果您的 NETCONF Java 工具包程序在安装程序中未指定特定端口号,则 NETCONF 会话在默认 Device
NETCONF-over-SSH 端口 830 上建立。要验证运行 SSH 的设备的默认端口上是否启用了 SSH 上的 NETCONF Junos OS,请在远程设备上输入以下操作模式命令:
user@host> show configuration system services ftp; netconf { ssh; }
如果缺少配置层次结构,在配置模式下发出以下语句以在默认端口上的 netconf
SSH 上启用 NETCONF:
[edit] user@host# set system services netconf ssh user@host# commit
如果配置层次结构指定了非默认端口的端口,您应该在对象构造参数中包括 netconf
Device
新端口号。例如,为端口 12345 上的 SSH 上的 NETCONF 配置了以下设备:
user@host> show configuration system services netconf { ssh { port 12345; } }
要纠正连接问题,在参数中包括新端口 Device
号。
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);