2016-04-20 72 views
1

我需要通過ssh連接到Mysql RDS DB,我試過的是打開一個ssh隧道然後連接到那個數據庫,但它沒有工作。通過ssh連接到mysql數據庫(java)

下面是我的代碼:

int lport = 3306; 
    String host = "10.254.64.135"; 
    String rhost = "localhost"; 
    int rport = 8000; 
    String user = "ubuntu"; 
    String dbuserName = "someusername"; 
    String dbpassword = "somepassword"; 
    String dburl = "jdbc:mysql://somedbhost.us-east-1.rds.amazonaws.com:3306"; 
    String driverName = "com.mysql.jdbc.Driver"; 
    String driverName2 = "org.gjt.mm.mysql.Driver"; 

    Session session = null; 

    try { 

     final java.util.Properties config = new java.util.Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     final JSch jsch = new JSch(); 
     session = jsch.getSession(user, host, 22); 
     jsch.addIdentity("C:\\Users\\rop\\workspace\\awskey.pem"); 
     session.setConfig(config); 
     session.connect(); 
     System.out.println("Connected through SSH"); 
     final int assinged_port = session.setPortForwardingL(rport, host,lport); 
     System.out.println("localhost:" + assinged_port + " -> " + rhost + ":" + rport); 
     System.out.println("Port Forwarded"); 

     //mysql database connectivity 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     //String url = "jdbc:mysql://localhost:" + rport + "/" + db; 
     con = DriverManager.getConnection(dburl, dbuserName, dbpassword); 
     System.out.println("Mysql Database connection established"); 
     System.out.println("DONE"); 

上述代碼崩潰與下面的異常,並且在該線路crashs 「CON =的DriverManager.getConnection(dburl,數據庫用戶名,DBPASSWORD);」:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信鏈路故障成功發送到 服務器的最後一個數據包是0毫秒前。驅動程序尚未收到來自服務器的任何數據包 。

的意思,而當我們從MySQL工作臺連接它不正常連接,快照如下:

enter image description here

請注意,SSH主機的ip比分貝主機IP

不同謝謝。

+0

因爲localhost:8000是隧道,所以你的jdbc應該連接到這個隧道。可能是由於lport和rport命名混淆。 – mootmoot

回答

1

您需要localhost和你從轉發本地端口替換JDBC URL的主機名和端口,您撥打rport

dburl = "jdbc:mysql://localhost:" + rport;

此外,我不知道MySQL的JDBC驅動程序支持連接到數據庫服務器不指定數據庫名稱:

dburl = "jdbc:mysql://localhost:" + rport + "/yourdatabasename";

此外,如果MySQL服務器不是R與SSH服務器在同一臺計算機上,請確保可以從SSH服務器連接到數據庫服務器。 默認情況下,MySQL不允許遠程連接。