通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL
Posted
技术标签:
【中文标题】通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL【英文标题】:Connect to remote MySQL from my local machine through Jumpbox/Proxy 【发布时间】:2020-11-14 08:01:50 【问题描述】:我可以从本地机器通过 Jumpbox/proxy 连接到远程 mysql。
我在 AWS 机器(A)中部署了一个 Java 应用程序,它可以访问并可以连接到远程 Mysql 服务器(B)。现在,当我需要在本地测试我的 Java 应用程序时,我无法连接到远程 Mysql 服务器(B)。
所以基本上我的 Java 应用程序可以通过 AWS 机器从我的本地机器连接到远程服务器。
这边 本地机器(java 应用程序)===> AWS 机器(A)==> Mysql 服务器(B)
AWS Machine(A) 只能通过 SSH 连接。 :(
隧道在这里有帮助吗?
【问题讨论】:
【参考方案1】:你可以使用JSch
http://www.jcraft.com/jsch/
如何使用它的示例
package com.journaldev.java.ssh
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.sql.Connection;
public class MySqlConnOverSSH
/**
* Java Program to connect to the remote database through SSH using port forwarding
* @author Pankaj@JournalDev
* @throws SQLException
*/
public static void main(String[] args) throws SQLException
int lport=5656;
String rhost="secure.journaldev.com";
String host="secure.journaldev.com";
int rport=3306;
String user="sshuser";
String password="sshpassword";
String dbuserName = "mysql";
String dbpassword = "mysql123";
String url = "jdbc:mysql://localhost:"+lport+"/mydb";
String driverName="com.mysql.jdbc.Driver";
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(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
int assinged_port=session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);
System.out.println("Port Forwarded");
//mysql database connectivity
Class.forName(driverName).newInstance();
conn = DriverManager.getConnection (url, dbuserName, dbpassword);
System.out.println ("Database connection established");
System.out.println("DONE");
catch(Exception e)
e.printStackTrace();
finally
if(conn != null && !conn.isClosed())
System.out.println("Closing Database Connection");
conn.close();
if(session !=null && session.isConnected())
System.out.println("Closing SSH Connection");
session.disconnect();
参考: https://www.journaldev.com/235/java-mysql-ssh-jsch-jdbc
【讨论】:
如果不更改代码,我能做些什么吗?有一个现有的代码我没有什么要改变的。我们可以在机器级别做点什么吗?以上是关于通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL的主要内容,如果未能解决你的问题,请参考以下文章