2012-02-14 81 views
0

我需要使用ssh連接到運行從遠程計算機一些coommands,但問題是:運行遠程命令槽隧道SSH和java

客戶端計算機(跑步運)被連接到網絡,其中我可以看到一臺服務器遠程(第二臺計算機(nix),在同一個網絡中)我可以用ssh連接它,但是包含這些文件的電腦(Running unix)不在這個網絡中,我只能連接這個通過在第二臺計算機上打開的動態隧道ssh,我通常使用Putty來配置此連接,然後我可以訪問遠程文件。

下圖展示的架構,(防火牆就像是第二A機)

Architecture

我需要自動進行這項工作,所以我已經做了一些試驗用java和JSch庫,這裏是一些代碼:

/* Direccion y puerto del host local */ 
    String host = "localhost"; 
    int lport = 5040; 


    /* Direccion y puerto del host remoto*/ 
    String rhost = "localhost"; 
    int rport = 80; 

    /* Usuario y password para conectarse al servidor ssh*/ 
    String user = "test"; 
    String pwd = "test"; 

    try{ 
     JSch jsch=new JSch(); 

     Session session=jsch.getSession(user, host, 22); 
     session.setPassword("test"); 

     Properties config = new Properties(); 
     config.put("StrictHostKeyChecking","no"); 
     session.setConfig(config); 
     session.connect(); 

     int assinged_port=session.setPortForwardingL(lport, rhost, rport); 
     System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport); 

我連接,但是當我運行一個命令全光照對象的會話的答案是從第二臺機器不是從如我所料的第三臺機器,我想知道是否有ANOT她的圖書館,有助於使這項工作或我使用錯誤的JSch。

回答

1

當然,如果您設置了rhost = "localhost",連接將到達SSH服務器,而不是在「資源」服務器上。 把正確的主機名稱,並應該沒有問題。 (我這樣做了一次。)

如果你想從JSch做兩個連接,而不是做一個本地端口轉發,然後連接到這個轉發的端口,你可以使用我的ProxySSH類,找到in the JSch wiki。 (我也是這樣做的,就像你在那裏類似的情況。)

+0

你能給我例子嗎?,我實現了一個成功的連接 – fers 2012-02-15 04:36:13

+0

,但我不能在資源服務器中執行一個命令 – fers 2012-02-15 04:36:49

+0

當我編寫它時(幾個月前),wiki中的例子對我有用,但當然,您需要一個具有目標服務器執行權限的帳戶。 – 2012-02-15 18:08:04

0

你必須在端口轉發後在第二個服務器上創建會話。然後建立連接到防火牆後面的服務器。

看看這個代碼example。這段代碼做的是創建一個本地端口轉發到目標系統上的ssh端口,然後通過它連接。 hostname命令的運行說明它的確在正在轉發的系統上運行。