文档章节

common-tools(4)之端口映射和SSH tunnel方式连接数据库

路小磊
 路小磊
发布于 2013/04/21 23:46
字数 739
阅读 1157
收藏 7

       如果大家用过一些数据库客户端软件,会发现里面有一项是SSH,可以使用SSH通道来连接到远程主机的数据库,此时我们就可以使用内网IP来直连数据库了。不知道大家有多少是这么用数据库的,我想这么设定肯定是为了安全吧。
        好么,现在问题来了,我想用程序连一下这个数据库该怎么办?那库只有内网IP,那只能用程序来模拟一个SSH通道了。
        我在网上一直找相关的类库,一直没有找到,最后在神奇的stackoverflow上找到一个回答才知道有个类库叫做jsch,功能异常强大,我这水平一般,完全没有搞懂其他功能,只发现了一个对本次主题有用的功能——端口映射。其实原理很简单,就是你给定SSH登录信息,登录后产生一个Session会话,然后将服务器上的某个端口映射到本地,这样就可以使用本地连接来连接数据库了。

        OK,先把这段代码地址贴出来。https://github.com/looly/common-tools/blob/master/src/main/java/com/baijob/commonTools/net/SSHUtil.java

        好的,我们开始。先贴测试代码

package com.baijob.commonTools;

import com.baijob.commonTools.net.SSHUtil;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class CommonTest {
	public static void main(String[] args) {
		Session session = SSHUtil.openSession("跳板机外网IP", 22, "username", "123456");
		try {
			boolean bindPort = SSHUtil.bindPort(session, "数据库服务器内网IP", 3306, 3306);
		} catch (JSchException e) {
			e.printStackTrace();
		}
	}
}
这个类的使用方法异常简单分成两个步骤:
step1:调用openSession方法SSH连接到一个远程主机(我们称之为跳板机),端口、用户名、密码要有
step2:调用bindPort方法把跳板机可以登录的那台数据库服务器的端口映射到本地,第一个参数是SSH Session,第二个参数是数据库所在服务器的内网IP地址,第三个参数是远程的端口,第四个参数是本机的端口
经过简单的两步,就可以把远程数据库的3306端口映射到本地了(当然,本地这个端口是不能被占的)

step3:我们就可以用JDBC连接此数据库了,当然连接字符串是这样的:localhost:3306

其实不只连接数据库,我们可以使用此方式把服务器上任意端口映射下来使用(想想把80端口映射下来的赶脚)

其实在https://github.com/looly/common-tools/tree/master/src/main/java/com/baijob/commonTools/db/ds下已经自动集成了通过SSH tunnel连接数据库的方法,只要按照https://github.com/looly/common-tools/blob/master/src/main/resources/config/db-example.setting的方式配置数据库连接即可简单的操作数据库。这个后续再说。

最后为雅安祈福吧,不知道他们的每个夜晚是怎么过来的……

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 337
博文 53
码字总数 40548
作品 5
乌海
程序员
私信 提问
加载中

评论(8)

路小磊
路小磊

引用来自“temporary”的评论

为什么不架个反向代理?

你不觉得反向代理架设起来更复杂?
路小磊
路小磊

引用来自“temporary”的评论

端口转发。目前的myentunnel跟tunnelier不是都自带么?

哦?去看看。主要SSH相关的东西非常不熟悉,依赖框架。
temporary
temporary
为什么不架个反向代理?
temporary
temporary
话说中文putty有后门来着,软件还是国外的放心点。
temporary
temporary
端口转发。目前的myentunnel跟tunnelier不是都自带么?
用户已屏蔽
用户已屏蔽

引用来自“loolly”的评论

引用来自“滔哥”的评论

看不懂,看不懂呀。。

就是有服务器A和B,A有外网,B只有内网,A和B在一个内网中,你想访问B的某个端口,于是就有了介个帖子……

啊,这样一说明鸟了,哈哈
路小磊
路小磊

引用来自“滔哥”的评论

看不懂,看不懂呀。。

就是有服务器A和B,A有外网,B只有内网,A和B在一个内网中,你想访问B的某个端口,于是就有了介个帖子……
用户已屏蔽
用户已屏蔽
看不懂,看不懂呀。。
Navicat for Mysql SSH tunnel 用跳板机解决方案

Navicat Mysql SSH tunnel不能使用跳板机,对于需要跳板机登录的主机,他自带的SSH Tunnel就是鸡肋了。其实从原理上分析,根本不需要开启他得SSH Tunnel,使用本机强大SSH端口转发,加上跳板...

扣丁禅师
2015/03/16
0
0
NestJS折腾记- (0) 开胃菜, TypeORM 连接远程的MySQL(ssh tunnel)及Linux信息过滤裁切基础

前言 昨天发现有这么一个框架,大概看了下官方文档,号称版本的 既视感,这对有经验的小伙伴来说,莫名的亲切.. 适合尝尝鲜,目前有, 上正式线我觉得等会稳定些, 这个系列我会以一个真实项目的开发...

CRPER
12/06
0
0
Navicat for Mysql SSH tunnel 跳板机解决方案

Navicat Mysql SSH tunnel不能使用跳板机,对于需要跳板机登录的主机,他自带的SSH Tunnel就是鸡肋了(只能1跳,不能2跳或多跳)。 其实从原理上分析,根本不需要开启他得SSH Tunnel,使用本...

扣丁禅师
2015/11/29
145
1
common-tools

java工具类,提供常用的功能方法,例如:时间工具、数据库连接池工具、ssh端口映射(已与数据库连接集成)、支持变量替换和自定义字符集的配置文件类、多线程工具类、文件读写工具类等等。还...

路小磊
2013/02/22
3.6K
0
JDBC通过SSH Tunnel连接MySQL数据库

有时候我们无法直接访问某台数据库,因为没有授权或者ip限制,但是可以通过登陆其他机器来访问,如果这台服务器安装有SSH,就可以方便的在本地通过该服务的端口映射来代理访问数据库。Navic...

cwalet
2013/04/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一次生产 CPU 100% 排查优化实践

前言 到了年底果然都不太平,最近又收到了运维报警:表示有些服务器负载非常高,让我们定位问题。 还真是想什么来什么,前些天还故意把某些服务器的负载提高(没错,老板让我写个 BUG!),不...

crossoverJie
15分钟前
3
0
Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现

作者 | Spring Cloud Alibaba 高级开发工程师洛夜 来自公众号阿里巴巴中间件投稿 前段时间 Hystrix 宣布不再维护之后(Hystrix 停止开发。。。Spring Cloud 何去何从?),Feign 作为一个跟 ...

Java技术栈
31分钟前
6
0
虚拟机加密

在超融合的基础设施和虚拟化成为常态的世界里,对加密的要求越来越高,越来越迫切,IT部门需考虑的重大安全问题和方法也浮现了出来。 物理数据中心时代,采取双保险式数据安全方法是相对简单...

linuxCool
35分钟前
2
0
MySQL 主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

野雪球
47分钟前
1
0
OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
今天
482
9

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部