从eclipse到远程mysql服务器的Java ssh2连接

从eclipse到远程mysql服务器的Java ssh2连接,java,mysql,eclipse,Java,Mysql,Eclipse,已经为此困扰了相当一段时间,请参考此处的代码: 正在尝试,但仍无法连接。这是我修改过的代码: 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.Sess

已经为此困扰了相当一段时间,请参考此处的代码: 正在尝试,但仍无法连接。这是我修改过的代码:

    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 remote database through SSH using port forwarding
    * @throws SQLException 
    */
    public static void main(String[] args) throws SQLException {

    int lport=5656;
    String rhost="fictitious@germany.com";
    String host="fictitious@germany.com";
    int rport=3306;
    String user="root";
    String password="root";
    String dbuserName = "root";
    String dbpassword = "root";
    String url = "jdbc:mysql://localhost:"+lport+"/test";
    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 assigned_port=session.setPortForwardingL(lport, rhost, rport);
        System.out.println("localhost:"+assigned_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();
        }
    }
}
下面是我得到的错误:

    Connected
    localhost:5656 -> fictitious@germany.com:3306
    Port Forwarded
    java.sql.SQLInvalidAuthorizationSpecException: Could not connect: Access denied for user 'root'@'fictitious@germany.com' (using password: YES)
at org.mariadb.jdbc.internal.util.ExceptionMapper.get(ExceptionMapper.java:121)Closing SSH Connection

at org.mariadb.jdbc.internal.util.ExceptionMapper.throwException(ExceptionMapper.java:69)
at org.mariadb.jdbc.Driver.connect(Driver.java:110)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at myDB.MySqlConnOverSSH.main(MySqlConnOverSSH.java:50)
    Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Could not connect: Access denied for user 'root'@'fictitious@germany.com' (using password: YES)
at  org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.authentication(AbstractConnectProtocol.java:433)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.handleConnectionPhases(AbstractConnectProtocol.java:397)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:318)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:630)
at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:580)
at org.mariadb.jdbc.Driver.connect(Driver.java:105)
... 3 more}

我是Java初学者,正在尝试探索不同的方法来实现这种连接。顺便说一下,我可以使用SecureCRT上给定的用户名和密码连接到数据库,因此授权错误有点令人困惑。如果有人能指导我做错了什么,以及如何纠正,那就太好了。提前谢谢你

我认为您没有从
“root”访问数据库的权限fictitious@germany.com“
Atmish-E-Azam你好,一开始我也这么想。但正如我提到的,我可以使用相同的登录数据通过SecureCRT(SecureCRT是一个坚如磐石的终端仿真器和用于Windows、Mac和Linux的telnet/SSH客户端)进行访问。它需要Java的特别许可吗?为什么同时使用ssh和mysql连接??我想你可以直接从java类连接db。这是一个远程服务器,我想学习java中的SSH连接。