Mysql不改默认侦听回环地址而ssh通道连接的办法
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通道连接的办法的更多相关文章
- CentOS7 增加回环地址
添加回环地址的命令和说明如下: #添加一个回环地址到lo网卡,添加多个可以改lo:后边的序号 [要添加的地址] netmask 255.255.255.255 broadcast [要添加的地址] # ...
- VMware配置回环地址用于测试
我们在开发过程中,很可能需要一台服务器用于测试,在这种环境下,我们很可能需要用到vmware来构建这样的开发环境.但如果当前处在一个离线,或是不在网内的环境下,我们所搭建的环境有可能无法 ...
- 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. ...
- CentOS 7添加本地回环地址
CentOS 7添加本地回环地址 1. 临时添加ip addr add 10.10.1.1/32 dev lo:1重启失效2.永久添加cd /etc/sysconfig/network-scripts ...
- springboot通过ssh通道连接mysql数据库
navicat可以通过ssh通道连接mysql数据库,那java中如何实现了,springboot又该怎样集成呢? 1.添加包 <dependency> <groupId>co ...
- [转载]Linux中的网络接口及LO回环接口
转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...
- 如何将数据库引擎配置为侦听多个 TCP 端口
SQL Server 2005 为 SQL Server 启用 TCP/IP 后,数据库引擎将侦听连接点上是否有传入的连接(由 IP 地址和 TCP 端口号组成).下列步骤将创建一个表 ...
- 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry
关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...
- windows 7中添加新硬件的两种方法(本地回环网卡)
最近在windows7上使用VMwareWorkstation7玩一些实验,遇到需要配置不同网络的问题. 因为在windows2003server上习惯使用要本地回环网卡了,那就想着在Windows7 ...
随机推荐
- onsubmit解惑
1.onsubmit的位置: onsubmit只存在于html <form>中,js的form中 2.submit与onsubmit的区别 发生顺序:onsubmit -> subm ...
- 修改ASP.NET文件上传大小限制
转自:http://www.hello-code.com/blog/asp.net/201603/5954.html 要点: 1.web.config中的<httpRuntime maxRequ ...
- java之Lombok
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法 pom依赖: <dependency ...
- SpringMVC中数据转换
SpringMVC中接收到的数据都是String形式,然后再根据反射机制将String转换成对应的类型.如果此时想接收一个Date类型,那么我们可以定义一个转换器来完成. 例如,我们有下面的Emp类: ...
- 热更新--动态加载framework
1.准备工作:先自己封装一个framework:http://www.cnblogs.com/sunjianfei/p/5781863.html 2.把封装好的framework压缩成zip,放到本地 ...
- The request sent by the client was syntactically incorrect.
HTTP Status 400 - type Status report message description The request sent by the client was syntacti ...
- MySQL 中文未正常显示
关于MySQL中文乱码问题 最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码: 之所以会显示乱码,就是因为MySQL客户端输出窗口显示中文时使用的字符编码不对 ...
- CentOS 7 隐藏任务栏和顶栏
我使用的是Gnome,对于使用惯了windows的我来说,这个界面确实有点丑,但是,也将就着用了,最近发现有一款软件(Cairo-Dock)可以美化桌面,于是就安装了,但是安装之后发现了一个问题:原来 ...
- 润乾在jetty应用服务器下的JNDI配置一
一. 此处绑定的数据源是以 DBCP 为实现.首先必须将数据库驱动(这里用了MYSQL数据库)和DBCP所需要的 Jar 包复制到 Jetty 根目录的 lib 目录下.DBCP主要需要以下3个 ...
- 鉴别JS数据类型的全套方法
ECMAScript 标准定义了 7 种数据类型:Boolean.Null.Undefined.Number.String.Symbol(ES6新增)和Object,除Object以外的那6种数据类型 ...