通过SSH隧道连接MySQL数据库
一.背景
问题所在:MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,数据安全如果只靠MySQL应用层面显然是不够的,虽然说MySQL实现的登录机制基本不存在泄露密码的风险,但是登录之后的SQL语句和执行结果的传输却都是明文传输的;
解决方案:出于数据库的安全性,数据库管理员在配置数据库时会为数据库增加一层“保护伞”,保护用户在连接数据库时的安全和信息不被泄漏,通常的做法就是通过SSH(SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell提供安全的传输和使用环境)隧道进行连接,也就是为数据库增加一个安全协议,这也导致了用户进行远程连接时的困难。
以下是通过ssh隧道连接的示意图:
0015c6baec0c129326d8498873395da
下面我们就介绍一下如何远程连接和通过SSH隧道连接滴滴云DC2中的MySQl数据库。
二.连接方法
本文操作均使用的滴滴云产品,所以操作过程中注意在"控制台"的"安全组"中设置好IP和端口的访问限制。
主机名 | 角色 | IP | 端口 |
---|---|---|---|
10-254-81-196 | MySQL主机 | 115.11.22.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允许远程连接:
[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;
远程连接:
[root@10-255-0-218 dc2-user]# mysql -h 115.11.22.94 -P 3306 -u root -p # 如果是秘钥就带上 -i 参数加xxx.pem秘钥
# 在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 7591
Server 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不允许远程登录;
0015c6bb0090b3007328ca1fa5394e5
建立隧道:
[root@10-255-0-218 dc2-user]# ssh -fCPN -L 3307:127.0.0.1:3306 -p 22 dc2-user@115.11.22.94
# 在本地打开一个SSH的守护进程,该进程会监听本地的3307端口,这个端口为隧道的入口,当访问本地的3307端口时,数据包会通过ssh进程,发送到10-254-81-196的3306端口;
# -C 使用压缩功能,是可选的,加快速度;
# -P 用一个非特权端口进行出去的连接;
# -f 一旦SSH完成认证并建立port forwarding,则转入后台运行;
# -N 不执行远程命令.该参数在只打开转发端口时很有用(V2版本SSH支持);
The authenticity of host '115.11.22.94 (115.11.22.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)? yes
Warning: Permanently added '115.11.22.94' (ECDSA) to the list of known hosts.
dc2-user@115.11.22.94's password:
# 输入被远程主机10-254-81-196的主机密码;
连接数据库:
[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 7581
Server 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成功。
2.3 MAC 系统 SSH隧道连接(推荐)
默认远程主机已安装MySQL;被连接MySQL不允许远程登录;借助第三方工具Navicat for
安装软件
Navicat官方网站下载Navicat for MySQL软件,并安装。
创建新的连接
常规选项:
“连接名” 自定义填写; “主机” 填写回环地址; “端口” 填写MySQL数据库所启用的端口号; “密码” 填写MySQL数据库的密码;
SSH选项:
“使用SSH通道” 勾选; “主机” 填写DC2:10-254-81-196的公网IP; “端口” 填写SSH所启用的端口号; “用户名” 填写滴滴云DC2登录账号,注意只能为"dc2-user"; “密码” 填写DC2:10-254-81-196的主机密码;
yst_local ,内网登录的信息
登录ssh服务器隧道