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);