使用JSch通过SSH隧道访问生产中的JMX

时间:2010-11-01 16:37:23

标签: java ssh jmx ssh-tunnel

我正在尝试使用JMX自动执行某些操作。

适用于开发环境。但是当谈到受防火墙保护的生产时,我需要建立一个SSH隧道,然后才能访问JMX控制台。

之前,我使用putty或ssh创建隧道并在本地运行我的java程序。由于我们使用1-2主机,因此更容易。现在它变成了10个主机。现在我不想每次都创建隧道并断开连接并运行程序。

我想要做的是,使用JSch自动创建SSH隧道,并将JMX与java程序连接。我试图这样做,但它不起作用。

我到了 java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常是:     java.net.ConnectException:连接被拒绝:连接

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

为什么不使用Runtime.exec()启动ssh?例如:

public static void main(String[] args) {
  String[][] data = new String[][]{new String[]{"user@server1", "2000:server1:30"},
          new String[]{"user2@server4", "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();
  }
}