Java SSH-подключение к MySQL доступ к локальному хосту вместо удаленного хоста - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь подключиться к MySQL на удаленном сервере через SSH соединение с моего компьютера под управлением ОС Windows. Я установил все необходимые SSH, Java JAR-файлы и доверие могу получить доступ к SSH, но вместо того, чтобы подключиться к удаленному хосту, я подключаю локальную базу данных на моей машине, как облако, я сказал ниже код для перехода на удаленный сервер так как мой провайдер сервера не дает ip только разрешить доступ через ssh код здесь

package connectsshserver;

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 {
    public static void main(String[] args) throws SQLException {
        int lport=3306;
        String rhost="host47.registrar-servers.com";
        String host="host47.registrar-servers.com";
        int rport=3306;
        String user="soft123a"; //ssh user name 
        String password="123487ab"; //ssh password
        String dbuserName = "root"; 
        String dbpassword = "";
        String url = "jdbc:mysql://127.0.0.1"+"/arbaccounting"; //host+db
        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, 21098);
            session.setPassword(password);
            session.setConfig(config);
            session.connect();
            System.out.println("Connected");
            int assinged_port=session.setPortForwardingL(21098, rhost, 3306);
            System.out.println("127.0.0.1:"+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();
            }
        }
    }

}

отлично, но для местных дБ что я изменить, чтобы подключиться к удаленной БД? Связано 127.0.0.1:21098 -> host47.registrar-servers.com:3306 Порт переадресован Соединение с базой данных установлено СДЕЛАННЫЙ Закрытие соединения с базой данных Закрытие SSH-соединения СТРОИТЬ УСПЕШНО (общее время: 9 секунд)

1 Ответ

0 голосов
/ 30 августа 2018

в строке: DriverManager.getConnection (url, dbuserName, dbpassword), ссылка url указывает на локальный хост (127.0.0.1), который устанавливает соединение БД с вашим устройством определения местоположения

java.net.InetAddress#getByName(String) позволит вам получить IP-адрес удаленного хоста, чтобы использовать его. Вы также должны иметь возможность заменить 127.0.0.1 на имя сервера, а не на IP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...