2012-04-02 7 views
6

Ich benutze Jconsole auf meinem MacBook und versuche eine Verbindung zu einem Linux-Terminal auf ec2 herzustellen, das keine Grafik hat (nur Kommandozeilenzugriff).Wie verwende ich Jconsole um eine Verbindung zu EC2 herzustellen?

Ich betreibe mein Code wie folgt aus:

java -jar program.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.remote.ssl=false 

ich here gelesen, dass es ein Problem mit dem Zugriff über EC2 war (nachdem ich hatte Probleme mit der Verbindung) und die Lösung schien ‚java.rmi.server.hostname to the public hostname of the instance

zu sein Ich bin ein bisschen verwirrt, wie das geht. Ich habe zwei Dinge versucht, ein, um es direkt in meinem Code (im leeren Raum statischen Hauptteil):

System.setProperty("java.rmi.server.hostname" , "external_EC2_address"); //in my real code I have the correct address here 

Das System es akzeptiert (keine Fehler, wenn ich erstellt/hochgeladen runnable jar). Ich öffnete auch die Firewall auf meiner Instanz, um den gesamten TCP-Verkehr zu erlauben. Kein Glück. Ich habe die obige Aussage auch als Flagge versucht, um ins Programm zu starten, aber immer noch kein Glück.

Irgendwelche Ideen, wie das geht?

UPDATE: Dies wird zeigen, wie grün ich in Java bin, ich habe einen Schritt weiter (immer noch nicht funktioniert), aber ich realisierte die java -jar dateiname.jar und dann die Optionen gab mir nicht das gleiche ergibt, dass mein -jar am Ende des Befehls steht. Ich habe das ausprobiert und das Programm versucht sich zu verbinden und sagt dann, dass die Verbindung fehlgeschlagen ist (vorher würde es es einfach auf dem Anmeldebildschirm sagen).

Antwort

2

Set der Hostname-Eigenschaft, bevor die VM startet:

java -Dcom.sun.management.jmxremote \ 
    -Dcom.sun.management.jmxremote.port=9005 \ 
    -Dcom.sun.management.jmxremote.authenticate=false \ 
    -Dcom.sun.management.remote.ssl=false \ 
    -Djava.rmi.server.hostname=the.public.ip \ 
    -jar program.jar 

die entsprechenden Regeln zu Ihrer Sicherheitsgruppe hinzufügen.

Schließlich sicherstellen, dass iptables gestoppt wird, da dies der Grund sein könnte, dass Sie keine Verbindung von der Außenwelt bekommen. Als root (oder mit sudo ...):

# service iptables stop 
+0

Danke für die Antwort. Ich habe gefolgt, was Sie geschrieben haben und immer noch den gleichen Fehler. –

1

Sie müssen den JMX-Remote-Port (9005 gemäß obigem Beispiel) im security group für Ihre Instanz öffnen.

+0

Ich habe dies bereits getan. nur um auf der sicheren Seite zu sein, habe ich auch 0 - 65535 geöffnet. –

+0

Die einzige andere Sache, die ich nicht von oben sagen kann, ist, ob Sie java.rmi.server.hostname auf den öffentlichen Hostnamen Ihrer Instanz setzen (dies ist normalerweise im Format ec2-xxx-yyy-zzz-aaa.compute) -1.amazonaws.com, wobei xxx-yyy-zzz-aaa die öffentliche IP-Adresse ist). Wenn du das schon getan hast, bin ich ratlos, tut mir leid. –

+0

Ihr Recht Ich habe den öffentlichen Hostnamen verwendet, um eine Verbindung herzustellen (was ich für ssh verwende) ec2-xxx. Ich habe eine IP-Adresse bekommen und es geschossen und immer noch das selbe Problem. –