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. Nodejs学习笔记(十二)—定时任务(node-schedule)

    写在之前 在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发送消息或邮件给用户.定时备份什么类型的文件等等 一般可以写个定时器,来完成相应的需求,在node.js中自已实现也非 ...

  2. ASP.NET Core 中的缓存

    目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...

  3. 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装”

    (摘自http://blog.sina.com.cn/s/blog_14eea47cb0102w25n.html) 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装” 1.打开火 ...

  4. Python引用复制,参数传递,弱引用与垃圾回收

    引用 先上个示例: >>> val = [1] >>> val[0] = val >>> val [[...]] 上述代码使val中包含自身,而产 ...

  5. 12.Reflect

    Reflect Reflect 概述 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API.Reflect对象的设计目的有这样几个. (1) 将Object对象的一些明 ...

  6. CentOS7安装后连不上网络无法使用yum

    更新日期:2018年5月31日 笔者今天在本地VMware中安装了CentOS7后,使用yum安装wget的时候发现不能下载,并有下图所示的提示: 于是,笔者就去问度娘,然后就找到了如下各种回复: 1 ...

  7. 使用IDEA工具配置和运行vue项目(详细其中的坑)

    刚来公司实习发现公司的前端使用的是vue,之前根本就没有听说过.然后一上来就需要看代码,but but 就是没有文档什么的东西, 就需要自己去研读,我就想去运行其中的前端和后端联调起来方便理解,结果在 ...

  8. SpringBoot(一)初遇

    环境: IDEA 2018.1.3 , jdk 1.8 , maven 3.3.9 零 第一次接触springboot, 如何学习比较困惑, 思前想后最后决定从文档来学习, 以下为学习中的参考资料: ...

  9. Linux下socket通信和多线程

    服务端socket流程:socket() –> bind() –> listen() –> accept() –> 读取.发送信息(recv,send等) 客户端socket流 ...

  10. JAVA非静态成员变量之死循环

    1.非静态成员变量 当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环 例子: public class ConstructorCls { private ConstructorCls ...