我需要通過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工作臺連接它不正常連接,快照如下:
請注意,SSH主機的ip比分貝主機IP
不同謝謝。
因爲localhost:8000是隧道,所以你的jdbc應該連接到這個隧道。可能是由於lport和rport命名混淆。 – mootmoot