首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到mysql的java SSH连接访问本地主机,而不是远程主机

到mysql的java SSH连接访问本地主机,而不是远程主机
EN

Stack Overflow用户
提问于 2018-08-31 01:21:05
回答 1查看 368关注 0票数 0

我试图从运行windows操作系统的pc上通过SSH连接连接远程服务器中的mysql。我安装了所有需要的ssh,Java jar和信任能够访问SSH,但不是连接到远程主机我连接本地数据库我的机器如何云我告诉下面的代码去远程服务器,因为我的服务器提供商也不给ip只允许通过ssh访问下面的代码如下

代码语言:javascript
复制
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();
            }
        }
    }

}

对于本地数据库,我该如何更改才能连接到远程数据库?Connected 127.0.0.1:21098 SSH host47.register-servers.com:3306端口转发数据库连接建立完成关闭数据库连接关闭->连接建立成功(总时间:9秒)

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 01:38:25

DriverManager.getConnection (url, dbuserName, dbpassword)行中,url引用指向localhost (127.0.0.1),它将与您的定位机器建立DB连接

java.net.InetAddress#getByName(String)将允许您检索远程主机的IP以便使用它。您还应该能够将127.0.0.1替换为服务器的名称,而不是IP。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52102428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档