簡體   English   中英

通過ssh連接mysql數據庫(java)

[英]Connect to mysql DB through ssh (java)

我需要通過 ssh 連接連接到 Mysql RDS 數據庫,我嘗試過的是打開一個 ssh 隧道,然后連接到該數據庫,但它沒有用。

下面是我的代碼:

 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");

上面的代碼因以下異常而崩潰,並在“con = DriverManager.getConnection(dburl, dbuserName, dbpassword);”這一行崩潰:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 最后一個數據包成功發送到服務器是 0 毫秒前。 驅動程序沒有收到來自服務器的任何數據包。

意思是當我們從 mysql 工作台連接時,它確實連接正常,在快照下方:

在此處輸入圖片說明

請注意,ssh 主機 ip 與 db 主機 ip 不同

謝謝。

您需要將 JDBC url 中的主機名和端口替換為localhost和您從中轉發的本地端口,您稱之為rport

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

另外,我不確定 MySQL JDBC 驅動程序是否支持在不指定數據庫名稱的情況下連接到數據庫服務器:

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

此外,如果 MySQL 服務器與 SSH 服務器不在同一台機器上運行,請確保您可以從 SSH 服務器連接到數據庫服務器。 MySQL 默認不允許遠程連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM