2015-10-05 66 views
0

我嘗試通過ssh隧道創建到遠程服務器的連接。在我的嘗試中,我使用了jsch和putty。DataSource的getConnection()忽略端口

int sshPort = 22; 

Connection conn = null; 
Session session = null; 

try { 
    //Set StrictHostKeyChecking property to no to avoid UnknownHostKey issue 
    java.util.Properties config = new java.util.Properties(); 
    config.put("StrictHostKeyChecking", "no"); 

    JSch jsch = new JSch(); 
    session = jsch.getSession("sshUser", "sshHost", sshPort); 
    session.setPassword(sshPassword); 
    session.setConfig(config); 
    session.connect(); 

    session.setPortForwardingL(8806, "127.0.0.1", 3306); 

    BasicDataSource basicDataSource = new BasicDataSource(); 
    basicDataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
    //I can type here any value of port, does not matter connection will be created on port 3306 
    basicDataSource.setUrl("jdbc:mysql://localhost:8806/db"); 
    basicDataSource.setUsername("user"); 
    basicDataSource.setPassword("password"); 
} 

從這個代碼,我期待着某些sshHost:22將在localhost:8806可用。

但我得到了connection = dataSource.getConnection();而不是connection = dataSource.getConnection();總是連接到數據庫上localhost:3306

enter image description here

正如我剛纔所說,我也嘗試通過膩子連接 - 結果是相同的,通過代碼連接忽略端口。

P.S.當我在IDEA的數據庫工具連接到'localhost:8806'時,Putty的隧道纔有效。

P.P.S.感謝@Cool建議現在我可以從代碼中建立隧道。但dataSource繼續忽略端口。

回答

1

您應該將「8806」轉發到「3306」而不是「22」端口。 所以我現在不能測試,但你應該使用以下行

session.setPortForwardingL(8806, "sshHost", 3306); 

順便說一句,你可以使用以下無需膩子等

ssh [email protected] -L 8806:localhost:3306 
+0

哦,我明白了我的錯誤代碼,但現在不能嘗試。 膩子隧道有什麼問題? –

+0

它應該是L8806 sshHost:3306不是本地主機 – cool

+0

非常感謝,希望它會幫助我 –