Ich versuche, mehrere JVMs, die auf verschiedenen Servern ausgeführt werden, über einen SSH-Tunnel zu überwachen.
Dank einer der UNIX-Gurus hier habe ich es geschafft, dies für einen einzelnen Server zum Laufen zu bringen, indem ich:
- Führen Sie
jstatd
auf dem Zielserver - Richten Sie Visual VM so ein, dass 9696 als Socken-Proxy-Port verwendet wird.
Führen Sie auf meinem lokalen PC Folgendes aus:
ssh -L 2222:server1:22 bastion-host
Führen Sie auf meinem lokalen PC Folgendes aus:
ssh -o port=2222 -D 9696 -L 1099:localhost:1099 localhost
Das macht den Trick. Wenn ich jetzt versuche, zu einem zweiten Server zu tunneln, versuche ich:
Führen Sie auf meinem lokalen PC Folgendes aus:
ssh -L 3333:server2:22 bastion-host
Führen Sie auf meinem lokalen PC Folgendes aus:
ssh -o port=3333 -D 9696 -L 2099:localhost:1099 localhost
Der letzte Schritt beschwert sich jedoch über:
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 9696
Hat jemand etwas Ähnliches geschafft?
Aktualisieren:
Der Grund dafür ist, dass jstatd eine RMI-Serveranwendung ist:
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html
Wie bei RMI-Anwendungen registrieren sich diese bei einer Rmiregistry. Für die Verwendung von rmi über eine Firewall muss ich SOCKS wie hier beschrieben verwenden:
http://download.oracle.com/javase/1.4.2/docs/guide/rmi/faq.html#firewallOut
Leider kann ich mit visualvm den SOCKS-Proxy-Port nur einmal festlegen, und mit der Option -D kann ich nicht denselben lokalen Port an beide Server weiterleiten ...
1099
? Können Sie genau angeben, ob bastion-host
eine Verbindung zu server1
und server2
ohne Beteiligung einer Firewall hergestellt werden kann?