Mysql不改默认侦听回环地址而ssh通道连接的办法

文:铁乐与猫

比较新版的mysql默认侦听的网卡地址是本地回环地址:127.0.0.1;
比如你在/etc/mysql/my.cnf配置文件中往往可以找到如下配置:
bind-address = 127.0.0.1

同时使用netstat命令查看mysql侦听的端口也可以发现,只侦听本地回环地址过来的请求:

netstat -antlp | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -

所以这也是为什么你明明设置了一个允许远程登录mysql数据库权限的用户但却仍被报10038错误的缘故。

因为它就根本没有去侦听外网ip或内网网卡的ip。

解决的办法当然是可以修改my.cnf的配置,将bind-address = 127.0.0.1 修改成侦听0.0.0.0或更具体的网卡IP。
但这都不够安全!
两全其美的办法其实是通过ssh通道去连接mysql。
原理就是类似你先ssh远程连接上mysql服务器,然后再连接服务器的本地127.0.0.1网卡的迂回方式达到效果。

一、以navicat图形界面客户端为例,新建连接的时候如下配置:


注意,常规选项下的主机名或ip地址一定是要填127.0.0.1,而不是平常填的远程ip地址,
在上面的示例中,平常填的应该是192.168.50.18,但使用ssh通道后就要填成127.0.0.1才对。
不然连接的时候会报错:Lost connection to MySQL server at 'reading initial communication packet'
这就是因为mysql服务器并没有侦听本地网卡ip引起。
而下面输入的 端口/用户名/密码 三项和数据库有关的就照常填写有权限连接的用户信息。

既然是使用ssh通道,那显然主机名或ip地址这里填的就要是ssh侦听的远程ip地址了,端口也要是ssh侦听的端口。
同样,用户名和密码是系统能连接到ssh的用户信息。又或者更安全的使用密钥连接也是可以的。

以上设置好后,点击连接测试,弹出连接成功的窗口表示设置无误。

ssh通道作为跳板机连接内网数据库服务器

除了作为加密连接到数据库服务器的127.0.0.1以外,还可以实现ssh通道到跳板机A,再连接到跳板机A才能访问到的内网mysql服务器B的效果。
做法就是常规那填的不再是上面的127.0.0.1地址,而是mysql服务器B的内网地址,例如192.168.251.19之类。

二、以命令行ssh连接mysql(不同服务器)为例:

首先是ssh的语法。

-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;

端口转发使用这样的命令语法:

ssh -f [username@remote host] -L [local port]:[full name of remote host]:[remote port] [some command]

你不仅可以转发多个端口而且可以在“~/.ssh/config”文件中用“LocalForward”设置经常使用的一些转发端口。

例,想在A服务器上连接B服务器的数据库:
ssh -fN -L(要绑定到的服务器A本地端口):(服务器B的Host):(服务器B上要访问的服务端口号) -p(服务器B的ssh端口,默认为22) (服务器B的ssh系统用户)@(服务器B的Host)
注:如果不用密码的还可以-i直接指定使用的密钥文件

比如,A服务器ip地址为:192.168.50.29,B服务器ip地址为:192.168.50.18;
在A服务器的终端上敲命令,绑定B服务器上的3306端口到A的3307端口:

ssh -fN -L3307:127.0.0.1:3306 -p22 o2o2@192.168.50.18
Password:
提示输入密码,输的就是ssh系统用户的密码。
netstat -antlp 可以查看到已成功映射B服务器的3306端口到服务器A的3307端口上:

可以看到ssh的进程中,有侦听本地的127.0.0.1:3307。

这时候使用mysql去连接3307端口就是连接到B服务器的mysql数据库:
[root@yunwei_OpenVPN ~]# mysql -h 127.0.0.1 -P 3307 -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 69
Server version: 5.7.21 Homebrew

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| task |
+--------------------+
5 rows in set (0.00 sec)

MySQL [(none)]>


另一种命令运行方法,将ssh连接放在前面:

ssh -NCPf o2o2@192.168.50.18 -L 3307:192.168.50.18:3306
参数解释
-C 使用压缩功能,是可选的,加快速度。
-P 用一个非特权端口进行出去的连接。
-f 一旦SSH完成认证并建立port forwarding,则转入后台运行。
-N 不执行远程命令。该参数在只打开转发端口时很有用(V2版本SSH支持)

这里的o2o2@192.168.50.18 是登陆mysql服务器的SSH用户名和IP地址;
-L 3307:192.168.50.18:3306 这个参数的意思是说在本机开放3307端口到192.168.50.18:3306端口的映射,也就是说隧道的入口为3307出口为mysql服务器的3306

ssh加密通道除了用在mysql连接外还可以用在别的服务上,或者做跳板再ssh另一台服务器也是有可能的。

2018-2-8 周四
End

Mysql不改默认侦听回环地址而ssh通道连接的办法的更多相关文章

  1. CentOS7 增加回环地址

    添加回环地址的命令和说明如下: #添加一个回环地址到lo网卡,添加多个可以改lo:后边的序号 [要添加的地址] netmask 255.255.255.255 broadcast [要添加的地址] # ...

  2. VMware配置回环地址用于测试

           我们在开发过程中,很可能需要一台服务器用于测试,在这种环境下,我们很可能需要用到vmware来构建这样的开发环境.但如果当前处在一个离线,或是不在网内的环境下,我们所搭建的环境有可能无法 ...

  3. 127.0.0.1 localhost 0.0.0.0 回环地址区别

    127.0.0.1:一般认为是本机ip,这个没错.但是本机ip不只是 127.0.0.1 而是所有回环地址. 回环地址: 包括127.0.0.1在内的 所有 指向本机的地址.范围是  127.0.0. ...

  4. CentOS 7添加本地回环地址

    CentOS 7添加本地回环地址 1. 临时添加ip addr add 10.10.1.1/32 dev lo:1重启失效2.永久添加cd /etc/sysconfig/network-scripts ...

  5. springboot通过ssh通道连接mysql数据库

    navicat可以通过ssh通道连接mysql数据库,那java中如何实现了,springboot又该怎样集成呢? 1.添加包 <dependency> <groupId>co ...

  6. [转载]Linux中的网络接口及LO回环接口

    转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...

  7. 如何将数据库引擎配置为侦听多个 TCP 端口

    SQL Server 2005         为 SQL Server 启用 TCP/IP 后,数据库引擎将侦听连接点上是否有传入的连接(由 IP 地址和 TCP 端口号组成).下列步骤将创建一个表 ...

  8. 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry

    关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...

  9. windows 7中添加新硬件的两种方法(本地回环网卡)

    最近在windows7上使用VMwareWorkstation7玩一些实验,遇到需要配置不同网络的问题. 因为在windows2003server上习惯使用要本地回环网卡了,那就想着在Windows7 ...

随机推荐

  1. Spark程序本地运行

    Spark程序本地运行   本次安装是在JDK安装完成的基础上进行的!  SPARK版本和hadoop版本必须对应!!! spark是基于hadoop运算的,两者有依赖关系,见下图: 前言: 1.环境 ...

  2. lucene源码分析(6)Query分析

    查询的入口 /** Lower-level search API. * * <p>{@link LeafCollector#collect(int)} is called for ever ...

  3. It is likely that the remote side declared peer gone on this JVM

    java.net.ConnectException: t3://host:port: Bootstrap to host/host:port failed. It is likely that the ...

  4. 异常空格,ASCII (194,160)问题

    今天运营的同学反映有一些店铺的名称后面带空格,我下意识的说不可能啊,我已经处理过了啊.然后就找出来看. 其中有个店铺的名称是“安踏 ”,第一眼看上去好像是带了个空格.然后我就仔细的看了下. pry(m ...

  5. 【转】Js获取当前日期时间及其它操作

    Js获取当前日期时间及其它操作 原文地址:http://www.cnblogs.com/carekee/articles/1678041.html var myDate = new Date();my ...

  6. 区别js中name与id的简单方法

    举个简单的例子: <form name="form1"> 用户名:<input type=text name="username" id=&q ...

  7. Firebird shadow

    火鸟数据库的shadow,即实时镜像. 主库发生变化,shadow也跟随变化,防止任何意外造成主库损坏无法使用,当然shadow可以有多个. 1.创建shadow的准备:修改Firebird.conf ...

  8. CALayer及其子类

    前言:这个系列要更新Core Animation的内容,但是CALayer是Core Animation的基础. 一 CALayer是什么? 摘自官网的一句话-Layers Provide the B ...

  9. TCP三次握手是什么?为什么要进行三次握手?两次,四次握手可以吗?

    1.第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”: 第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”:    第三次握手,回传ACK报文,传到信息:“好的,我知道了 ...

  10. O(∩_∩)O~~

    1.在一切ac的路上,所以的难题都是纸老虎. 2.加油吧,少年.