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 ...
quelle
1099
? Können Sie genau angeben, obbastion-host
eine Verbindung zuserver1
undserver2
ohne Beteiligung einer Firewall hergestellt werden kann?Antworten:
Habe ich Recht, wenn ich denke, Sie haben Ihren Computer (Computer A) und sagen zwei Server (A und B), mit denen Sie an einem bestimmten Port keine direkte Verbindung herstellen können und die Sie über SSH zu ihnen tunneln möchten?
In diesem Fall erstellen Sie zwei Tunnel von Ihrem Computer (einen zu jedem Zielserver) an verschiedenen lokalen Ports mit -L nicht -D und stellen dann in Ihrem Überwachungstool eine Verbindung zu Ihrem lokalen Computer her (keine Proxy-Einstellungen), als wäre es der Remote-Server, den Sie überprüfen möchten.
Dann verbinden Sie sich mit Ihrem lokalen Monitor mit localhost: 9000 und localhost: 9001, und diese Tunnel verbinden Sie mit Ihren Ziel-jstatds.
Wenn es einen Zwischenserver gibt, dann einen Zwei-Hop-Tunnel,
Hmm, wenn Bastion-Host mit allen JVMs sprechen kann, dann
Reicht aus, um einen Socken-Proxy zu erstellen, den Sie dann einfach über Port 9000 verwenden können.
quelle
Von der SSH-Manpage:
Sie geben denselben lokalen Port an, von dem zweimal weitergeleitet werden soll. Probieren Sie
-D 9697
Ihr zweites Setup aus.quelle
Der letzte Schritt sagt genug: Es kann nicht an Port 9696 abgehört werden. Das liegt daran, dass Sie, wenn es Ihr zweiter Tunnel ist, einen anderen Port verwenden sollten, während 9696 den ersten verwaltet.
quelle