2010-11-01 116 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