【转】通过SSH隧道连接MySQL数据库
原文连接:https://help.didiyun.com/hc/kb/article/1240160/
通过SSH隧道连接MySQL数据库
一.背景
问题所在:MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,数据安全如果只靠MySQL应用层面显然是不够的,虽然说MySQL实现的登录机制基本不存在泄露密码的风险,但是登录之后的SQL语句和执行结果的传输却都是明文传输的;
解决方案:出于数据库的安全性,数据库管理员在配置数据库时会为数据库增加一层“保护伞”,保护用户在连接数据库时的安全和信息不被泄漏,通常的做法就是通过SSH(SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell提供安全的传输和使用环境)隧道进行连接,也就是为数据库增加一个安全协议,这也导致了用户进行远程连接时的困难。
以下是通过ssh隧道连接的示意图:
下面我们就介绍一下如何远程连接和通过SSH隧道连接滴滴云DC2中的MySQl数据库。
二.连接方法
本文操作均使用的滴滴云产品,所以操作过程中注意在"控制台"的"安全组"中设置好IP和端口的访问限制。
| DC2主机名 | 角色 | IP | 端口 |
|---|---|---|---|
| 10-254-81-196 | MySQL主机 | 116.85.57.94 | 22/3306 |
| 10-255-0-218 | 远程主机 | 116.85.33.185 | 22/3306/3307 |
2.1 Linux 普通远程连接
默认情况下,MySQL帐号不允许从远程登陆,只能在localhost登录,如按照普通方式远程连接MySQL,需要添加远程主机(116.85.33.185)的登录权限。
-
修改MySQL允许远程连接:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@10-254-81-196 dc2-user]# mysql -u root -p# 本地登录MySQL;Enter password:# 输入MySQL密码;mysql> grant all on *.* to root@'116.85.33.185' identified by 'pass4you';# 允许root用户通过116.85.33.185访问数据库mysql> flush privileges; |
-
远程连接:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@10-255-0-218 dc2-user]# mysql -h 116.85.57.94 -P 3306 -u root -p# 在DC2:10-255-0-218上通过3306端口远程连接DC2:10-254-81-196中的MySQL数据库; Enter password:# 输入MySQL密码;Welcome to the MariaDB monitor. Commands end with ; or \g.Your MySQL connection id is 7591Server version: 5.7.25 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]> # 远程连接成功。 |
2.2 Linux SSH隧道连接(推荐)
默认远程主机已安装MySQL;被连接MySQL不允许远程登录;
-
建立隧道:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@10-255-0-218 dc2-user]# ssh -fCPN -L 3307:127.0.0.1:3306 -p 22 dc2-user@116.85.57.94# 在本地打开一个SSH的守护进程,该进程会监听本地的3307端口,这个端口为隧道的入口,当访问本地的3307端口时,数据包会通过ssh进程,发送到10-254-81-196的3306端口;# -C 使用压缩功能,是可选的,加快速度;# -P 用一个非特权端口进行出去的连接;# -f 一旦SSH完成认证并建立port forwarding,则转入后台运行;# -N 不执行远程命令.该参数在只打开转发端口时很有用(V2版本SSH支持);The authenticity of host '116.85.57.94 (116.85.57.94)' can't be established.ECDSA key fingerprint is SHA256:lmwBveuC78QBzZBIEDPXgoNI0J58cT8u9k4A3Yh6+wQ.ECDSA key fingerprint is MD5:aa:34:00:e4:36:d3:a3:fd:08:4d:8f:62:01:50:6f:40.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '116.85.57.94' (ECDSA) to the list of known hosts.dc2-user@116.85.57.94's password:# 输入被远程主机10-254-81-196的主机密码; |
-
连接数据库:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@10-255-0-218 dc2-user]# mysql -h 127.0.0.1 -P 3307 -u root -p# 通过本地3307端口连接MySQL数据库;Enter password:# 输入MySQL密码;Welcome to the MariaDB monitor. Commands end with ; or \g.Your MySQL connection id is 7581Server version: 5.7.25 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]># 通过SSH隧道远程连接MySQL成功。 |
注意若购买的数据库为滴滴云的云数据库 MySQL,连接时需要确保主库有关联的DC2(可通外网),并将ssh时的"127.0.0.1"修改为主库地址。
2.3 MAC 系统 SSH隧道连接(推荐)
默认远程主机已安装MySQL;被连接MySQL不允许远程登录;借助第三方工具Navicat for MySQL(免费试用版,可免费试用14天)实现SSH隧道连接MySQL,这是一套管理和开发MySQL或MariaDB的可通过图形界面操作的应用程序。
-
安装软件
Navicat官方网站下载Navicat for MySQL软件,并安装。
-
创建新的连接
常规选项:
"连接名" 自定义填写; "主机" 填写回环地址; "端口" 填写MySQL数据库所启用的端口号; "密码" 填写MySQL数据库的密码;

SSH选项:
"使用SSH通道" 勾选; "主机" 填写DC2:10-254-81-196的公网IP; "端口" 填写SSH所启用的端口号; "用户名" 填写滴滴云DC2登录账号,注意只能为"dc2-user"; "密码" 填写DC2:10-254-81-196的主机密码;

-
连接成功


浙公网安备 33010602011771号