当mysql数据库部署在内网服务器时,出于安全考虑通常不会将3306端口直接开放到公网,此时直接通过Navicat连接会被防火墙拦截。通过SSH隧道技术,可以借助SSH服务器的端口转发能力,间接访问内网中的mysql服务,既满足远程访问需求,又不会增加数据库的安全风险。

SSH隧道连接原理
SSH隧道的核心逻辑是借助一台拥有公网访问权限且能连通内网mysql的SSH服务器,将本地端口的请求转发到SSH服务器,再由SSH服务器转发到目标mysql服务器。整个过程mysql端口不需要对外暴露,所有流量都通过SSH加密通道传输,安全性更高。
Navicat配置SSH隧道连接mysql步骤
1. 准备前置信息
在配置前需要确认以下信息已经获取:
- SSH服务器的公网IP或域名、SSH端口(默认22)、登录用户名、登录密码或私钥文件
- 内网mysql服务器的IP地址、端口(默认3306)、登录用户名、登录密码
- SSH服务器和内网mysql服务器之间网络互通,SSH服务器可以访问mysql的对应端口
2. 新建mysql连接
打开Navicat,点击左上角连接按钮,选择MySQL,进入连接配置界面。
3. 配置常规连接参数
在常规标签页中,填写mysql相关的连接信息:
- 连接名:自定义一个便于识别的名称,比如内网mysql-SSH隧道
- 主机:填写
127.0.0.1,因为后续会通过SSH隧道将本地端口转发到远程mysql,本地访问127.0.0.1即可映射到远程mysql - 端口:默认3306,如果mysql修改过端口则填写实际端口
- 用户名:填写mysql的登录用户名
- 密码:填写mysql对应用户的登录密码
4. 配置SSH隧道参数
切换到SSH标签页,勾选使用SSH隧道选项,然后填写SSH服务器的相关信息:
- 主机:填写SSH服务器的公网IP或域名
- 端口:填写SSH服务的端口,默认是22,若SSH修改过端口则填写实际端口
- 用户名:填写SSH服务器的登录用户名
- 认证方式:可以选择密码或者公钥,如果选择密码则填写SSH登录密码,如果选择公钥则上传对应的私钥文件
- 保存密码:勾选后Navicat会保存SSH登录凭证,下次连接不需要重复输入
5. 测试连接并保存
填写完所有参数后,先点击SSH标签页下方的测试连接按钮,确认SSH隧道可以正常建立。如果SSH连接成功,再点击常规标签页的测试连接按钮,确认mysql可以正常访问。两次测试都通过后,点击确定保存连接配置,之后就可以在Navicat左侧连接列表中找到该连接,双击即可访问内网mysql。
常见问题排查
SSH连接失败
如果SSH测试连接失败,首先检查SSH服务器的公网IP、端口、用户名、密码是否正确,确认SSH服务正常运行,且防火墙没有拦截SSH端口。如果是密钥认证失败,检查私钥文件是否匹配,权限是否正确。
mysql连接失败
SSH隧道建立成功但mysql连接失败,通常是以下原因:
- 常规标签页的主机填写错误,必须填写
127.0.0.1而不是mysql的实际内网IP - SSH服务器无法访问内网mysql的对应端口,可以在SSH服务器上执行
telnet mysql_ip mysql_port命令测试连通性 - mysql用户没有开放本地访问权限,因为通过SSH隧道访问mysql时,mysql识别到的来源是SSH服务器本地,需要确认mysql用户允许
127.0.0.1或者localhost登录
配置示例参考
假设SSH服务器公网IP是192.168.0.1,SSH端口22,用户名ssh_user,密码ssh_pwd;内网mysqlIP是10.0.0.10,端口3306,用户名mysql_user,密码mysql_pwd,配置参数如下:
| 配置项 | 填写内容 |
|---|---|
| 常规-主机 | 127.0.0.1 |
| 常规-端口 | 3306 |
| 常规-用户名 | mysql_user |
| 常规-密码 | mysql_pwd |
| SSH-主机 | 192.168.0.1 |
| SSH-端口 | 22 |
| SSH-用户名 | ssh_user |
| SSH-密码 | ssh_pwd |
注意事项
使用SSH隧道连接mysql时,不需要在SSH服务器上额外做端口转发配置,Navicat会自动处理隧道建立的逻辑。如果SSH服务器需要跳板机才能访问,目前Navicat原生不支持多跳SSH隧道,需要先手动建立好跳板机到目标SSH服务器的隧道,再配置Navicat连接。另外建议定期更新SSH和mysql的密码,避免凭证泄露带来安全风险。