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 ...
随机推荐
- Spark程序本地运行
Spark程序本地运行 本次安装是在JDK安装完成的基础上进行的! SPARK版本和hadoop版本必须对应!!! spark是基于hadoop运算的,两者有依赖关系,见下图: 前言: 1.环境 ...
- lucene源码分析(6)Query分析
查询的入口 /** Lower-level search API. * * <p>{@link LeafCollector#collect(int)} is called for ever ...
- 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 ...
- 异常空格,ASCII (194,160)问题
今天运营的同学反映有一些店铺的名称后面带空格,我下意识的说不可能啊,我已经处理过了啊.然后就找出来看. 其中有个店铺的名称是“安踏 ”,第一眼看上去好像是带了个空格.然后我就仔细的看了下. pry(m ...
- 【转】Js获取当前日期时间及其它操作
Js获取当前日期时间及其它操作 原文地址:http://www.cnblogs.com/carekee/articles/1678041.html var myDate = new Date();my ...
- 区别js中name与id的简单方法
举个简单的例子: <form name="form1"> 用户名:<input type=text name="username" id=&q ...
- Firebird shadow
火鸟数据库的shadow,即实时镜像. 主库发生变化,shadow也跟随变化,防止任何意外造成主库损坏无法使用,当然shadow可以有多个. 1.创建shadow的准备:修改Firebird.conf ...
- CALayer及其子类
前言:这个系列要更新Core Animation的内容,但是CALayer是Core Animation的基础. 一 CALayer是什么? 摘自官网的一句话-Layers Provide the B ...
- TCP三次握手是什么?为什么要进行三次握手?两次,四次握手可以吗?
1.第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”: 第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”: 第三次握手,回传ACK报文,传到信息:“好的,我知道了 ...
- O(∩_∩)O~~
1.在一切ac的路上,所以的难题都是纸老虎. 2.加油吧,少年.