这是一种网络的保护策略,且不需要root用户授权的网络跳转。学会这个,可以应用到其他应用中,不仅仅用于mysql的连接。

先说一下场景:

mysql所在服务器A:172.16.131.7

中转服务器B:172.16.131.13

windows客户端

 

服务器A只对131段的机器开放了22和3306端口,其他段的之开放22端口。

服务器B对外的端口都开放。

windows客户端需要使用服务器A的mysql服务

ssh2 连接mysql 命令 mysql配置ssh连接_mysql

1.首先第一步我们使用mysql客户端自带的配置,访问服务器A的mysql服务。服务器A的3306端口不对外开放,只有22端口。需要跳过,这样来配置:

ssh2 连接mysql 命令 mysql配置ssh连接_服务器_02

在常规页面这样的:

ssh2 连接mysql 命令 mysql配置ssh连接_mysql_03

注意:常规页中的主机名,是localhost

为什么这个样子?Windows客户端通过访问服务器A的22端口建立通道,然后在服务器A的22端口跳转到本地3306端口来访问mysql。

2.下面就用命令来实现上面的ssh页面配置。

需要支持ssh命令哦,不支持的话需要自己来安装ssh服务。

点击可以参照文章

ssh2 连接mysql 命令 mysql配置ssh连接_服务器_04

上面的意思是:windows与131.7建立ssh通道,本机启动监听3306端口(第一个),用hywlptapp这个用户,通过ssh通道的22端口(默认端口)登录,并与131.7的3306端口建立连接。

简单来说:windows的3306端口和服务器A的3306端口建立通道了,可以访问本机的3306端口就能访问服务器A的3306了。

学会这个命令,就可以通过22端口跳到其他服务器了。

3.只能监听3306吗?答案是否定的。也可以监听别的端口访问。

ssh -L 9999:localhost:3306 hywlptapp@172.16.131.7

解读:本地监听9999端口,与服务器A的3306端口建立了连接。

4.windows和服务器A之间可以通过别的服务器连接吗?OK,没问题。

ssh2 连接mysql 命令 mysql配置ssh连接_服务器_05

ssh2 连接mysql 命令 mysql配置ssh连接_mysql_06

windows客户端启动3306端口,访问服务器B的22端口,再与服务器A的3306端口建立通道。

服务器B没有做任何配置,都是在windos上面执行命令的。

4.如果中间不止一台服务器在中间,怎么办?

4.1 服务器B启动监听服务,连接服务器A。

4.2 windows启动监听连接服务器B。

第3,4个的最终效果是一样的,但是服务器B又多做了一步操作,这样即使有多台服务器,也都是可以复制的。

ssh2 连接mysql 命令 mysql配置ssh连接_ssh+mysql_07

服务器B监听9999端口,访问服务器A的3306

ssh2 连接mysql 命令 mysql配置ssh连接_ssh+mysql_08

windows监听3306,,访问服务器B的9999端口。

这样就形成一条链路:

ssh2 连接mysql 命令 mysql配置ssh连接_ssh网络跳转_09

这样即使有多台服务器在中间也可以进行网络跳转了,ssh又很通用,适用范围广。