服务器基于安全考虑未暴露不必要的端口,

有些时候我们需要远程连接这些端口, 比如只有3306 仅允许本地连接, 这个时候我们可以通过ssh proxy 方式连接.

直接上代码:

package com.etoak.demo;import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;/*** ssh 代理转发端口* @author lizhenhe 2022/7/19 21:11*/
public class SSHProxy {private static final SSHProxy proxy = new SSHProxy();private Session session;/*** @return*/public static SSHProxy getInstance() {return proxy;}/*** @param host        SSH主机* @param port        SSH端口* @param userId      SSH用户* @param keyFilePath 私钥路径* @return* @throws JSchException*/public void createSSHSession(String host, int port, String userId, String keyFilePath) throws JSchException {JSch jsch = new JSch();this.session = jsch.getSession(userId, host, port);jsch.addIdentity(keyFilePath);session.setConfig("StrictHostKeyChecking", "no");session.connect();}/*** @param localePort 本地服务端口* @param targetHost 连接的目标主机* @param targetPort 连接的目标端口* @return* @throws JSchException*/public void forward(int localePort, String targetHost, int targetPort) throws JSchException {session.setPortForwardingL(localePort, targetHost, targetPort);}/*** @param args*/public static void main(String[] args) {// ===============1. 实例化===============SSHProxy proxy = SSHProxy.getInstance();// ===============2. 创建SSH会话===============//SSH服务器String host = "x.x.x.x";//ssh连接私钥路径, 放在项目中,使用配置文件代替String keyFilePath = "/Users/lizhenhe/Downloads/jsh-ssh-demo/src/main/resources/key.ppk";//SSH服务端口int port = 22;//SSH连接用户名String userId = "root";try {proxy.createSSHSession(host, port, userId, keyFilePath);} catch (JSchException e) {e.printStackTrace();}// ===============3. 端口跳转 ===============// 程序中使用  jdbc:mysql://localhost:13306 连接, 其中13306 是通过ssh 代理过来的// 本地服务端口, 这个可以根据需求更改int localePort = 13306;// 目标服务器String targetHost = "localhost";// 目标服务端口int targetPort = 3306;try {proxy.forward(localePort, targetHost, targetPort);//fixme 上线时 修改成loggerSystem.out.println("通过ssh转发端口成功");} catch (JSchException e) {e.printStackTrace();}}}
    <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>

这个时候 你就可以直接通过代码或常用客户端 连接转发出来的端口 如上例中 13306 来连接数据库了,

Java, jsch , ssh , ppk 密钥文件, 连接远程数据库 mysql相关推荐

  1. java项目——Dom4j读取XML文件连接orecal数据库

    Dom4j介绍:           dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集 成了DOM,SAX和JAXP.在国内比较 ...

  2. MySQL命令行连接远程数据库

    mysql命令用户连接远程数据库 mysql命令格式: mysql -h主机地址 -u用户名 -p用户密码 例如:mysql -h10.1.1.143 -uroot -ptest 连接带端口: mys ...

  3. linux mysql 10061_详解使用navicat连接远程linux mysql数据库出现10061未知故障

    使用使用navicat连接远程linux mysql数据库出现10061未知故障,设置使用ssh连接后出现2013故障 本机环境:win10 navicat premium mysql数据库主机环境: ...

  4. 最详细Android连接远程的MySQL数据库实例

    最详细Android连接远程的MySQL数据库实例 tags:MySQL 文章目录 最详细Android连接远程的MySQL数据库实例 前言 环境配置 查看MySQL:version方法 新建Andr ...

  5. pl/sql developer连接远程数据库

    本地不安装oracle client程序,直接使用pl/sql developer连接远程数据库 考虑到机子本身资源有限,一个client会占用很多资源,尝试使用不安装客户端的方式进行远程连接. 需要 ...

  6. 连接远程数据库ORACLE11g,错误百出!

    客户机中PLSQL DEV访问虚拟机中的ORACLE11g,错误百出! 创建时间: 2017/10/14 18:44 作者: CNSIMO 标签: ORACLE 忙了一下午,只有两个字形容:麻烦! 安 ...

  7. sqlplus连接远程数据库

    方式一:简易连接,不用进行网络配置,其实就是tnsname.ora文件,但只支持oracle10G以上. 命令:sqlplus 用户名/密码@ip地址[:端口]/service_name [as sy ...

  8. php mongodb连接数据库,PHP下 Mongodb 连接远程数据库的实例代码

    WINDOWS 下装MongoDB 1.在mongodb的文件夹下创建 data.logs 文件夹 和mongo.conf 命令行命令! D:\mongodb\bin> mongod --dbp ...

  9. python数据分析——如何用python连接远程数据库

    本文将以SQLite.MySQL,PostgreSQL为例讲解python怎样连接远程数据库并执行相关数据库操作. SQLite SQLite可能是与Python连接的最方便的数据库,因为我们不需要安 ...

最新文章

  1. 端到端基于图像的伪激光雷达3D目标检测
  2. 2020年6月18日 618感言
  3. 参数估计Bayesian方法的困惑点
  4. ng机器学习视频笔记(十四) ——推荐系统基础理论
  5. 内置方法-str方法定制变量输出信息
  6. 【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)
  7. 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案
  8. 2017年公众号32篇热文回看
  9. 软件测试核心之用例设计
  10. Groovy获取json和xml数据
  11. MSDN Visual系列:用WSSv3中的SPGridView控件来显示数据
  12. csdn 博客代码块显示复制按钮
  13. [笔记]深入解析Windows操作系统《二》系统架构
  14. nod32 激活码 地址 NOD 32
  15. 网页游戏开发语言AS3(ActiveScript3.0)
  16. 判断样本均值:单样本T检验,双T检验(T-T检验),配对样本T检验(P-T检验)
  17. 自学神经网络系列 —— 8 前馈神经网络
  18. 201771010112罗松《面向对象程序设计(java)》第十三周学习总结
  19. 新手搭建网站后视频资源在网站上是如何存储的?
  20. 松下A6伺服速度控制模式

热门文章

  1. 水彩画工具JixiPix Aquarella for Mac
  2. APPS BFC-11-75-03B 75欧RF变压器替Mini-Circuit TC1-1T
  3. linux 启动过程
  4. 库乐队历史版本怎么下载_库乐队下载_库乐队安卓版下载_库乐队下载安装-太平洋下载中心...
  5. C# Snap7 实现对西门子PLC的读写(本篇主要对系统诊断缓存区(SSL或SZL)内容进行读取)
  6. Storm之——使用daemontools监控Storm进程
  7. Nodejs一键实现微信内打开网页url自动跳转外部浏览器访问的功能
  8. CUDA 11.2安装血泪史
  9. mysql sdo geometry_c#读写SDO_GEOMETRY字段
  10. HTC官方RUU固件提取刷机包rom.zip以及RUU解密教程