SSHトンネリング経由で JConsole

JConsole を SSH トンネリング経由で行う方法です。

ポートへの到達確認。

まず、サーバ側のポートに到達できるか確認しましょう。SSHでトンネリングしてから、telnetでポートを叩いてみましょう。この時点でつながらない場合は、SSHの設定ミスや、サーバ側でのパケットフィルタリングや、物理レベルの問題の可能性があります。

サーバアドレスの指定

クライアントとサーバでRMI接続は、以下のような手順で行われます。

  1. ローカルホストから、サーバのポートに接続。
  2. サーバは、サーバが公開するリモートオブジェクトの情報を返す。
  3. クライアントは、サーバから受け取った情報を元にリモートオブジェクトのスタブを作成し、リモートオブジェクトに接続する。

ここで問題になるのが 2 の動作で、リモートオブジェクトのホスト名がクライアントからIP到達不可な場合はアクセスできません。SSHトンネリングを行う必要のある場合は、通常はIP到達不能なアドレスが返ってきているはずです。

そのため、サーバのVM起動時のプロパティによって、サーバの公開アドレスを localhost として設定します。

-Djava.rmi.server.hostname=localhost

そうすることにより、2 の動作時に、クライアントはローカルホストに接続しに行くようになります。