首页 > 数据库 >java使用ssh通道连接mysql

java使用ssh通道连接mysql

时间:2024-03-07 16:47:28浏览次数:25  
标签:java private REMOTE SSH mysql import 连接 ssh

添加依赖

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>

添加配置

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.springframework.stereotype.Component;

import java.util.Properties;

/**
 *  db1连接配置 ssh
 */
@Component
public class Ds1SSHConnectionConfig {
    //本地的ssh中的knownhost文件路径
    private String SSH_PATH_FILE_KNOWN_HOSTS = "C:\\Users\\HUAWEI\\.ssh\\known_hosts";
    private String SSH_PATH_FILE_PRIVATE_KEY = "C:\\Users\\HUAWEI\\.ssh\\id_rsa";
    private String SSH_USER = "user";
    //ssh远程连接的ip地址
    private String SSH_REMOTE_SERVER = "1.15.xx.xxx";
    //ssh连接的端口号,一般默认为22
    private Integer SSH_REMOTE_PORT = 22;
    //ssh通行短语 如果不为空需要替换为【设置私钥】第一个构造方法
    private String SSH_PASS_PHRASE = "";
    //本地mysql发起连接的IP地址
    private String MYSQL_REMOTE_SERVER = "192.168.0.2";
    //本地数据库连接时用的端口号(不能填3306)
    private Integer LOCAl_PORT = 3307;
    //远程数据库端口用的端口号
    private Integer REMOTE_PORT = 3306;

    //com.jcraft.jsch.Session;
    private Session session;

    //关闭ssh连接
    public void closeSSH() {
        session.disconnect();
    }

    //创建ssh连接
    public void createSSH() throws JSchException {
        JSch jSch = new JSch();

        //下面这两个设置是在公钥模式需要设置的,非公钥模式不需要进行设置
        //设置known_hosts文件路径,如:~/.ssh/known_hosts(known_hosts中存储是已认证的远程主机host key)
        jSch.setKnownHosts(SSH_PATH_FILE_KNOWN_HOSTS);
        //设置私钥
//        jSch.addIdentity(SSH_PATH_FILE_PRIVATE_KEY, SSH_PASS_PHRASE);
        jSch.addIdentity(SSH_PATH_FILE_PRIVATE_KEY);

        session = jSch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT);

        //如果是密码模式需要设置密码
        //session.setPassword(sshPassword);

        //设置连接过程不校验known_hosts文件中的信息
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);

        //ssh 建立连接!
        session.connect();

        //根据安全策略,您必须通过转发端口进行连接
        session.setPortForwardingL(LOCAl_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT);
    }
}

添加监听器

import org.springframework.stereotype.Component;

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

/**
 * 监听器
 */
@Component//尽量加上这个
@WebListener//声明为监听器
public class Ds1ContextListener implements ServletContextListener {
    private Ds1SSHConnectionConfig sshConnectionConfig;

    public Ds1ContextListener() {
        super();
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("DS:1 context initialized ... !");
        try {
            sshConnectionConfig = new Ds1SSHConnectionConfig();
            sshConnectionConfig.createSSH();
        } catch (Throwable e) {
            e.printStackTrace(); // 连接失败
        }

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("DS:1 context destroyed ... !");
        sshConnectionConfig.closeSSH();//断开ssh连接
    }
}

修改数据库连接地址

spring:
  datasource:
    ds1:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3307/test_db?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true

 

标签:java,private,REMOTE,SSH,mysql,import,连接,ssh
From: https://www.cnblogs.com/cgy-home/p/18059228

相关文章

  • java 注解
    1、什么是注解      类似一种特殊的注释,可以在程序运行时被反射获取,如同标签。2、注解分类内置注解自定义注解内置注解Java定义了一套注解,共有7个,3个在java.lang中,剩下4个在java.lang.annotation中。作用在代码的注解:@Override-检查该方法是否是重......
  • macOS m1芯片报错 java.lang.UnsatisfiedLinkError: no taos in java.library.path
    项目中有用到TDengine,MacOSm1芯片本地开发启动项目报错如下java.lang.UnsatisfiedLinkError:notaosinjava.library.path方案一(推荐)以上错误是因为java在连接TDengine数据库的时候没有找到本地函数库。本地安装一下TDengine,然后在/usr/local/lib/下就会有taos函数库。因此......
  • java过滤器拦截路劲问题
    在我们使用filter过滤器时注解@WebFilter("/serverlet/demo1/")多层目录只针对文件注解@WebServlet(name="Servlet1",value="/serverlet/demo1/test1")具有过滤作用(原因:注解路径相同),其中“@WebFilter("/serverlet/demo1/")”括号里的*代表只要serverlet注解前半部分相同的文......
  • 熟悉又陌生的JavaWeb 第2天
    传送门JSP基本语法什么是servlet自定义Servlet,直接使用抽象好的HttpServlet更好MyCustomServletpublicclassMyCustomServletextendsHttpServlet{@SerialprivatestaticfinallongserialVersionUID=-599450886992695746L;@Overrideprotected......
  • c#与java之间的区别盘点
    原文链接:http://www.mobiletrain.org/about/BBS/119467.htmlhttps://blog.csdn.net/clpig0125/article/details/50774628C#(CSharp)是Microsoft开发的一种面向对象的编程语言,而Java是由SunMicrosystems开发的一种面向对象的编程语言。虽然它们都是面向对象的编程语言,但它们之......
  • mysql 5.7安装mariadb审计插件
    官方文档:https://mariadb.com/kb/en/mariadb-audit-plugin/参考文档:https://segmentfault.com/a/1190000042056617下载10.5版本的mariadb,再高的版本不适合5.7 1、下载mariadb下载界面:https://dlm.mariadb.com/browse/mariadb_server/101/1956/bintar-linux-x86_64/root......
  • 关于安卓开发远程连接mysql数据库2
    安卓开发远程连接数据库方式2:通过发送请求到web中间层实现对数据库的增删改查操作。第一步需要给安卓程序添加上网络权限,在安卓项目中的配置文件中加上代码<uses-permission android:name="android.permission.INTERNET"/>语句用于获得访问网络的权限第二步添加Retrofit+GSON......
  • 卡码java基础课 | 10.平均绩点
    学习内容:字符串的声明和初始化字符串的常见操作字符串的特点读取字符串输入equals方法字符串格式化输出format和printf字符串的遍历flag编程思想switch-case浮点数运算重点归纳:字符串1.声明和初始化:Stringname="Hello,Java";Stringmessage=newString("Hello"......
  • Blazor笔记-JavaScript Interop(JS互调用)
    更新记录注意:非教程。纯笔记,日常查询用的。需要教程的小伙伴找几本书看看即可哈哈,有Vue基础的话非常快,概念都是通的。非工作需要不建议深入学习Blazor,深入Vue吧,用的多,哈哈。完整目录地址:https://www.cnblogs.com/cqpanda/p/17596348.html点击查看2024年3月7日发布。2023......
  • 使用VS Code 连线MySQL使用
    使用vscode操作mysql,要添加dll1.使用vscode创建MVC项目,在*****.csproj文件里添加ItemGroup点击查看代码<ProjectSdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net5.0</TargetFramework></PropertyGroup><Item......