我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java SSH 秘钥连接mysql数据库的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java SSH 秘钥连接mysql数据库的方法

当目标数据库不能直连的,需要一个服务器作为中间跳板的时候,我们需要通过SSH通道连接数据库。

ps:使用ssh连接,相当于本地开了个端口去连接远程的服务,就是ssh通道,本地起的项目监听本地的端口,就可以使用这个通道进行数据传输。

1、引入依赖


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

2、代码编写


#ssh连接是否开启
ssh.forward.enabled=true
#SSH连接跳板机地址 必填
ssh.forward.host=
#SSH连接端口  必填  固定
ssh.forward.port=22
#SSH连接用户名  必填  
ssh.forward.username=
#SSH连接密码 
ssh.forward.password=
#本地起的  必填  固定
ssh.forward.from_host=localhost
#本地开启的端口  必填 
ssh.forward.from_port=3307
#需要监听的远程服务的ip  必填
ssh.forward.to_host=
#需要监听的远程端口  必填
ssh.forward.to_port=3306
#SSH连接秘钥地址,也可以使用rsa.ppk文件
ssh.identity=C:\\Users\\69425\\.ssh\\id_rsa

2.1、配置 application.ssh.properties文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2、配置 SshConfiguration代码


import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.stereotype.Component;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Properties;

@Slf4j
@Component
public class SshConfiguration implements ServletContextInitializer {

    public SshConfiguration() {
        try {
            Properties p = new Properties();
            p.load(getClass().getResourceAsStream("/application.ssh.properties"));
            //如果配置文件包含ssh.forward.enabled属性,则使用ssh转发
            if (p.getProperty("ssh.forward.enabled") != null) {
                log.info("ssh forward is opend.");
                log.info("ssh init ……");
                JSch jSch = new JSch();
                //需要使用秘钥时添加
                jSch.addIdentity(p.getProperty("ssh.identity"));
                Session session = jSch.getSession(p.getProperty("ssh.forward.username"), p.getProperty("ssh.forward.host"), Integer.parseInt(p.getProperty("ssh.forward.port")));
                session.setConfig("StrictHostKeyChecking", "no");
                session.setPassword(p.getProperty("ssh.forward.password"));
                session.connect();
                session.setPortForwardingL(p.getProperty("ssh.forward.from_host"), Integer.parseInt(p.getProperty("ssh.forward.from_port")), p.getProperty("ssh.forward.to_host"), Integer.parseInt(p.getProperty("ssh.forward.to_port")));
            } else {
                log.info("ssh forward is closed.");
            }
        } catch (IOException e) {
            log.error("ssh IOException failed.", e);
        } catch (JSchException e) {
            log.error("ssh JSchException failed.", e);
        } catch (Exception e) {
            log.error("ssh settings is failed. skip!", e);
        }
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        log.info("已使用ssh连接");
    }
}

2.3、application.yum


spring:
  datasource:
#  localhost:3307 这里是ssh.forward.from_host:ssh.forward.from_port
    url: jdbc:mysql://localhost:3307/mysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#  mysql数据库连接用户名
    username: 
#  mysql数据库连接密码
    password: 
    driver-class-name: com.mysql.cj.jdbc.Driver
#   使用了druid去配置及监控连接池和本文无关,可加可不加
    druid:
      initial-size: 2
      min-idle: 1
      max-active: 10
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: select 'x'
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true

3、启动项目

在这里插入图片描述

当看到这里**“已使用ssh连接”**就可以了是连接成功了。

4、出现异常报错

com.jcraft.jsch.JSchException: invalid privatekey: [B@53a7a60c

这是秘钥问题,这个异常只在使用秘钥时候才会有。是秘钥解析失败,并不是使用秘钥连接失败。如果出现这个异常可以到这篇文章中查看:详解Java使用Jsch与sftp服务器实现ssh免密登录。

这个依赖已经很久没更新了。但是目前本人未发现更好的ssh连接jar包 ↩︎

到此这篇关于Java SSH 秘钥连接mysql数据库的方法的文章就介绍到这了,更多相关Java ssh连接mysql数据库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java SSH 秘钥连接mysql数据库的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中SSH秘钥连接mysql数据库的方法

这篇文章主要介绍“Java中SSH秘钥连接mysql数据库的方法”,在日常操作中,相信很多人在Java中SSH秘钥连接mysql数据库的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中SSH秘钥连
2023-06-20

java连接Access数据库的方法

java连接Access数据库的方法,分享给大家步骤:1.现在我们一般使用的编译环境是java SE 1.8,不支持odbc的连接方式,所以可以用jdbc的连接方式,还要在网上下载一个jdbc的驱动包。(这里用了Access_JDBC30.
2023-05-31

php7连接mysql数据库的方法

这篇文章主要为大家展示了php7连接mysql数据库的方法,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“php7连接mysql数据库的方法”这篇文章吧。php有什么用php是一个嵌套的缩写名称,指
2023-06-06

Java连接mysql数据库

文章目录 一、Java连接mysql数据库1.1 流程1.2 一个测试连接的java程序 二、优化:创建一个工具类2.1 存在的问题2.2 创建配置文件和工具类2.3 测试使用工具类进行CRUD操作 三、SQL注入问题3.1
2023-08-16

Java连接各种数据库的方法

本篇内容介绍了“Java连接各种数据库的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JDBC里统一的使用方法:Class.for(jd
2023-06-17

MySQL查看数据库连接数的方法

目录一、查看数据库连接数二、查看mysql数据库状态一、查看数据库连接数a)SQL:show full processlist;注意:1. 若不加上full选项,则最多显示100条记录2. 若以root帐号登录,你能看到所有用户的当前连
MySQL查看数据库连接数的方法
2024-08-20

win7上python2.7连接mysql数据库的方法

一:安装MySQL-python驱动pip install mysql二:连接到MySQL服务器的test数据库#!/usr/bin/python # -*- coding: UTF-8 -*-import mysql.connector
2022-06-04

C#连接MySQL数据库的方法步骤

最近两天在解决C#连接MySql数据库的问题,通过不同的从网上学习,最终找到了解决的办法,下面这篇文章主要给大家介绍了关于C#连接MySQL数据库的方法步骤,需要的朋友可以参考下
2023-01-11

编程热搜

目录