2010-11-01 21 views
3

J'essaye d'automatiser une étape de faire certaines choses avec JMX.Accéder à JMX en production via un tunnel SSH en utilisant JSch

Cela fonctionne pour l'environnement de développement. mais quand il s'agit de production qui est protégé derrière un pare-feu, j'ai besoin de faire un tunnel SSH et seulement je peux accéder à la console JMX.

Plus tôt, j'ai utilisé putty ou ssh pour créer un tunnel et exécuter mon programme Java localement. Depuis que nous avons utilisé 1-2 hôte, c'était plus facile. maintenant il est devenu jusqu'à 10 hôtes. maintenant que je ne veux pas créer un tunnel à chaque fois et déconnecter et exécuter le programme. Ce que je voulais faire, c'est créer automatiquement un tunnel SSH en utilisant JSch et connecter JMX avec le programme java. J'ai essayé de le faire mais ça ne marche pas.

Je reçois java.rmi.ConnectException: Connexion refusée pour héberger: localhost; Exception imbriquée est: java.net.ConnectException: Connexion refusée: se connecter

est-il possible de le faire?

Répondre

1

Pourquoi n'utilisez-vous pas Runtime.exec() pour lancer ssh? Exemple:

public static void main(String[] args) { 
    String[][] data = new String[][]{new String[]{"[email protected]", "2000:server1:30"}, 
      new String[]{"[email protected]", "2000:server4:30"}}; 
    Process[] processes = new Process[data.length]; 
    for (int i=0; i<data.length; i++) { 
    processes[i] = Runtime.getRuntime().exec("ssh", data[i][0], "-L", data[i][1], "-N"); 
    } 
    //do something else, for example, wait for user interaction here 
    for (int i=0; i<data.length; i++) { 
    processes[i].destroy(); 
    } 
} 
+0

Ensuite, je serais en mesure de tunnel à une seule boîte. Je veux kickstart plusieurs tunnels parallèlement. – coder

+0

Qu'en est-il d'un thread par serveur auquel vous voulez vous connecter? – thejh

+0

Runtime.exec est l'échelle du système. même si vous exécutez un thread par serveur, je ne suis pas sûr. – coder