SSHトンネルを介して異なるサーバーで実行されている複数のJVMを監視しようとしています。
ここでは、UNIXの専門家のおかげで、次のように単一のサーバーで実行できました。
jstatd
ターゲットサーバーで実行- 9696をソックスプロキシポートとして使用するようにVisual VMを設定します。
私のローカルPCで、以下を実行します。
ssh -L 2222:server1:22 bastion-host
私のローカルPCで、以下を実行します。
ssh -o port=2222 -D 9696 -L 1099:localhost:1099 localhost
これにより問題が解決します。 2番目のサーバーにトンネリングしようとすると、次のことを試みます。
私のローカルPCで、以下を実行します。
ssh -L 3333:server2:22 bastion-host
私のローカルPCで、以下を実行します。
ssh -o port=3333 -D 9696 -L 2099:localhost:1099 localhost
しかし、最後のステップでは、次のように文句を言います。
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 9696
似たようなことをした人はいますか?
修正する:
この複雑な理由は、jstatdがRMIサーバーアプリケーションであるためです。
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html
RMIアプリケーションと同様に、rmiregistryを使用して登録されます。ファイアウォールを介してrmiを使用するには、以下のようにSOCKSを使用する必要があります。
http://download.oracle.com/javase/1.4.2/docs/guide/rmi/faq.html#firewallOut
残念ながら、VisualVMではSOCKSプロキシポートを一度だけ設定でき、-Dオプションを使用すると同じローカルポートを両方のサーバーに転送できません。
答え1
すでにコンピュータ(コンピュータA)があり、特定のポートから直接接続できない2つのサーバ(AとB)があり、SSHトンネルを介して接続しようとしていると思いましたか? ?
その場合は、-Dの代わりに-Lを使用して、異なるローカルポート上のマシンに2つのトンネル(各ターゲットサーバーに1つずつ)を作成し、監視ツール(エージェントレス設定)からローカルマシンに接続できます。確認したいリモートサーバー。
ssh -L 9000:localhost:<local port jstatd listens on> user@server1
ssh -L 9001:localhost:<local port jstatd listens on> user@server2
次に、ローカルモニタを使用してlocalhost:9000とlocalhost:9001に接続します。このトンネルはターゲットjstatdに接続されます。
中間サーバーがあれば、2ホップトンネルがあり、
ssh -L 9000:server1:<local port jstatd listens on> user@bastion-host
ssh -L 9001:server2:<local port jstatd listens on> user@bastion-host
さて、bastion-hostがすべてのJVMと通信できる場合
ssh -D 9000 user@bastion-host
ポート9000で利用可能なソックスプロキシを作成するだけで十分です。
答え2
SSHのマンページから:
-D [bind_address:]port
Specifies a local “dynamic” application-level port forwarding.
This works by allocating a socket to listen to port on the local
side, optionally bound to the specified bind_address. Whenever a
connection is made to this port, the connection is forwarded over
the secure channel, and the application protocol is then used to
determine where to connect to from the remote machine. Currently
the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
as a SOCKS server. Only root can forward privileged ports.
Dynamic port forwardings can also be specified in the configura‐
tion file.
転送のために同じローカルポートを2回指定します-D 9697
。
答え3
最後のステップにすべてが示されています。ポート 9696 でリスニングを開始できません。これは、2番目のトンネルの場合、最初のトンネルの処理中に別のポート9696を使用する必要があるためです。