2010-11-01 99 views
3

我正在尝试使用JMX自动执行一些操作。使用JSch通过SSH隧道访问生产中的JMX

它适用于开发环境。但是当涉及受防火墙保护的产品时,我需要创建SSH隧道,然后才能访问JMX控制台。

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

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

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

有可能这样做吗?

回答

1

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

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

然后我就可以隧道到只有一个盒子。我想平行地启动多个隧道。 – coder 2010-11-01 16:44:50

+0

每台要连接的服务器的一个线程如何? – thejh 2010-11-01 16:48:12

+0

Runtime.exec是系统范围的。即使你为每个服务器执行一个线程,我也不确定。 – coder 2010-11-01 17:33:05