栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

项目中通过SSH链接mysql数据库~

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

项目中通过SSH链接mysql数据库~

本文章解决的问题:当你没有数据库公网权限但是拥有与该数据库内网通信的服务器的链接权限时,可通过该服务器SSH跳转链接到mysql服务器,本文章是具体代码实现。

1,引入jsch依赖坐标:

        
            com.jcraft
            jsch
            0.1.53
        

2,需要添加两个配置文件:
链接配置:

package com.example.demo.sshConfig;




import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.util.Properties;

public class SSHConnection {

    // 自定义的映射端口,需要和yml中的port保持一致
    private final static int LOCAl_PORT = 3307;

    // SSH远程服务器配置
    private final static String SSH_REMOTE_SERVER = "被链接的服务器ip";
    private final static int SSH_REMOTE_PORT = SSH远程服务器端口号;
    private final static String SSH_USER = "SSH远程服务器账号";
    private final static String SSH_PASSWORD = "SSH远程服务器密码";
    
    // 远程数据库配置
    private final static String MYSQL_REMOTE_SERVER = "被链接的数据库ip";
    private final static int REMOTE_PORT = 3306;

    private Session sesion; //represents each ssh session

    // 测试连接
    public static void main(String[] args) throws Throwable {
        System.out.println(new SSHConnection());
    }

    public SSHConnection() throws Throwable {

        JSch jsch = new JSch();
        // 需要用到了开启
        // jsch.setKnownHosts(S_PATH_FILE_KNOWN_HOSTS);
        //jsch.addIdentity(S_PATH_FILE_PRIVATE_KEY);

        sesion = jsch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT);
        sesion.setPassword(SSH_PASSWORD);

        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        sesion.setConfig(config);
        // 去连接
        sesion.connect(); //ssh connection established!
        //  设置转发
        sesion.setPortForwardingL(LOCAl_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT);

        System.out.println("SSHConnection--运行OK");
    }

    public void closeSSH() {
        sesion.disconnect();
    }
}

监听配置:

package com.example.demo.sshConfig;



import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class SSHWebListener implements ServletContextListener {

    private SSHConnection sshConnection;

    public SSHWebListener() {
        super();
    }

    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("SSHWebListener initialized ... !");
        try {
            sshConnection= new SSHConnection();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("SSHWebListener destroyed ... !");
        sshConnection.closeSSH();
    }
}

3,yml配置文件需要添加的配置:

# datasource
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3307/sshtest?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useServerPrepStmts=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

注意:yml中的数据库链接ip,就用本机ip,端口号要与SSHConnection配置文件中的LOCAl_PORT保持一致,否则无法映射链接

原理:先通过本机连接到远程服务器,再通过本机的链接信息映射中转链接远程mysql数据库。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号