文档章节

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

路小磊
 路小磊
发布于 2013/04/21 23:46
字数 739
阅读 1115
收藏 7
点赞 0
评论 8

       如果大家用过一些数据库客户端软件,会发现里面有一项是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的方式配置数据库连接即可简单的操作数据库。这个后续再说。

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

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 272
博文 53
码字总数 39918
作品 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

Navicat for Mysql SSH tunnel 跳板机解决方案

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

扣丁禅师 ⋅ 2015/11/29 ⋅ 1

common-tools

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

路小磊 ⋅ 2013/02/22 ⋅ 0

JDBC通过SSH Tunnel连接MySQL数据库

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

cwalet ⋅ 2013/04/26 ⋅ 0

用SSH解决大局域网反向端口转发问题

本文作者Tony Lee,转载自FreeBuf.COM 自从家里换了联通光纤后,联通就在我家宽带出口前搭了一个路由器,我家也彻底沦为192.168.1.0/24段的局域网了,带来的问题就是在外网无法访问家里的路由...

踏雪无痕SS ⋅ 2017/08/06 ⋅ 0

SSH隧道与端口转发及内网穿透

SSH隧道与端口转发及内网穿透 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。下面是个人根据自己的需求以及在网上查找的...

fighting-cluber ⋅ 2013/12/22 ⋅ 0

烂泥:学习ssh之ssh隧道应用

本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb。 前几篇有关ssh的文章,我们只是介绍了ssh的登录功能。其实ssh功能不只是这些,这篇文章我...

烂泥行天下 ⋅ 2015/09/18 ⋅ 0

Ngrok搭建服务器

一、ngrok简介及作用 ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。 这些看上去很麻烦,我们更需要的是了解ngrok的用途。 完美代替“花生壳”软件。 “花生壳”是一款老牌的内网...

dingdayu ⋅ 2016/08/23 ⋅ 6

indows下使用TortoiseGit管理github工程

以前一直用TorToiseHg管理工程,没用过TortoiseGit,这两个分别对分布式管理工具Hg,Git做了图形化界面,使之更易用。不用记忆大量命令。除了Hg和Git之间的差别之外,TorToiseHg和TorGoiseG...

mysky221 ⋅ 2014/11/02 ⋅ 0

ssh隧道转发内网穿透功能实现(反弹式木马原理)

一、ssh说明 SSH(secure shell)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境(这点很重要);SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。人...

dyc2005 ⋅ 04/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 24分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 36分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部