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正しくありません。接続の確立前に、接続タイムアウト値を超えました。
ソリューション
デバイスが稼働している状態を確認します。また、プログラム コード内のコンストラクタの引数 Device で IP アドレスまたはホスト名が正しいか検証します。
デバイスに接続するデフォルトのタイムアウト値は5000ミリ秒です。プログラムが接続を確立するのに十 setTimeOut() 分な時間を確保するために、タイムアウト値をより大きな間隔に設定するには、デバイス オブジェクト上でこのメソッドを呼び出します。次のコードでは、タイムアウト間隔を 10 秒に設定します。
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null);
device.setTimeOut(10000);
device.connect();
接続エラーのトラブルシューティング:接続なし
問題
説明
IllegalStateException 例外が発生し、次のエラー メッセージが表示されます。
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 セッションがリモート デバイスとの間で確立されていませんでした。
ソリューション
デバイス オブジェクト connect() でこのメソッドを呼び出して、SSHv2 接続と、NETCONF サーバーが実行されているデバイスとのデフォルトの 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 ユーザー アクセスおよび認証ユーザー ガイド を参照してください 。
ユーザー アカウントが 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サーバーが存在するデバイスでNETCONF over SSHが有効になっていない、または別のポートで有効になっている可能性があります。
ソリューション
NETCONF サーバーが存在するデバイスで、SSH 上で NETCONF over SSH が有効になっているか確認します。NETCONF Java ツールキット Device プログラムで argurments 内の特定のポート番号が指定されていない場合、NETCONF セッションはデフォルトの NETCONF-over-SSH ポート 830 で確立されます。Junos OSを実行しているデバイスのデフォルト ポートでNETCONF over SSHが有効になっているかどうかを確認するには、リモート デバイスで次の動作モード コマンドを入力します。
user@host> show configuration system services
ftp;
netconf {
ssh;
}
設定階層が netconf 気に入る場合は、設定モードで次のステートメントを発行し、デフォルト ポートで SSH 上で NETCONF over SSH を有効にします。
[edit] user@host# set system services netconf ssh user@host# commit
設定階層で netconf デフォルト ポート以外 Device のポートが指定されている場合は、オブジェクト コンストラクタの引数に新しいポート番号を含める必要があります。たとえば、ポート12345でNETCONF over SSHに対して以下のデバイスが設定されています。
user@host> show configuration system services
netconf {
ssh {
port 12345;
}
}
接続の問題を修正するには、新しいポート番号を引数に Device 含める。
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);