无法通过java eclipse中的ssh隧道远程连接到mysql数据库

时间:2014-09-03 17:03:10

标签: java mysql eclipse windows solaris

我在Windows上使用Java Eclipse,并在Solaris 10上设置了Mysql。我使用过JSch,但它不允许我用root用户连接到Mysql数据库。 我收到以下错误:

Connected
localhost:3306 -> xxx.xx.xxx.xxx:3306
Port Forwarded
java.sql.SQLException: Access denied for user: 'root@192.168.1.1' (Using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:894)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1309)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2032)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:729)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ir.mnaeimabadi.hello.mysqltest.main(mysqltest.java:47)

实际上在这一行:

DriverManager.getConnection (url, dbuserName, dbpassword);

它给了我错误。 这是整体代码:

    package ir.mnaeimabadi.hello;

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 mysqltest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         int lport=3306;
            String rhost="xxx.xx.xxx.xxx";
            String host="xxx.xx.xxx.xxx";
            int rport=3306;
            String user="myusr";//ssh user
            String password="mypass";//ssh pass
            String dbuserName = "root";//mysql user
            String dbpassword = "rootPass"; //mysql pass
            String url = "jdbc:mysql://xxx.xx.xxx.xxx:";
            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");


               url = url+assinged_port+"/myDB";

                //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{
                try {
                    if(conn != null && !conn.isClosed()){
                        System.out.println("Closing Database Connection");
                        try {
                            conn.close();
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if(session !=null && session.isConnected()){
                    System.out.println("Closing SSH Connection");
                    session.disconnect();
                }
            }
    }

}

0 个答案:

没有答案