SSH 链接数据库怎么配置
SSH 隧道是一种安全地通过网络连接到数据库的方法,尤其适用于需要远程访问数据库但又希望避免直接暴露数据库端口的情况,通过 SSH 隧道,所有数据都会通过加密的 SSH 连接传输,从而提高安全性,以下是配置 SSH 隧道连接数据库的详细步骤。

确认环境与工具准备
在开始配置之前,确保你的环境中已安装必要的工具:
- SSH 客户端:大多数 Linux 和 macOS 系统已预装 OpenSSH,Windows 用户可使用 PuTTY 或 OpenSSH。
- 数据库客户端:如 MySQL Workbench、DBeaver、psql 等,根据数据库类型选择。
- 服务器信息:需要知道 SSH 服务器的 IP 地址、端口(默认 22)、用户名以及数据库服务器的地址(通常是本地地址,如 127.0.0.1)。
使用命令行配置 SSH 隧道
通过命令行创建 SSH 隧道是最直接的方式,以下是基本命令格式:
ssh -L [本地端口]:[数据库服务器地址]:[数据库端口] [SSH用户名]@[SSH服务器地址]
假设:
- SSH 服务器地址为
0.113.1,用户名为admin。 - 数据库运行在 SSH 服务器本地,地址为
0.0.1,端口为3306(MySQL)。 - 本地映射端口为
13306。
命令如下:
ssh -L 13306:127.0.0.1:3306 admin@203.0.113.1
执行后,SSH 会提示输入密码或使用密钥认证,成功连接后,本地 13306 端口将转发到数据库的 3306 端口。
在数据库客户端中连接
配置好 SSH 隧道后,数据库客户端需要连接到本地映射的端口,以 MySQL Workbench 为例:

- 新建连接,主机名填
0.0.1,端口填13306。 - 用户名和密码为数据库的实际凭据。
其他客户端(如 DBeaver)的配置方式类似,只需确保目标地址为本地映射端口。
使用配置文件管理 SSH 隧道
如果需要频繁连接,可以 SSH 配置文件中保存隧道设置,编辑 ~/.ssh/config 文件(Windows 路径为 C:\Users\用户名\.ssh\config),添加以下内容:
Host db-tunnel
HostName 203.0.113.1
User admin
LocalForward 13306 127.0.0.1:3306
之后只需运行 ssh db-tunnel 即可启动隧道,无需重复输入命令。
验证 SSH 隧道是否正常工作
可以通过以下方式验证隧道是否生效:
- 在本地终端运行
netstat -an | grep 13306,检查端口是否被监听。 - 使用
telnet 127.0.0.1 13306或nc -zv 127.0.0.1 13306测试端口连通性。
常见问题与解决方案
- 连接超时:检查 SSH 服务器地址、端口及防火墙设置。
- 权限拒绝:确认 SSH 用户是否有权限访问数据库,或尝试使用密钥认证替代密码。
- 端口占用:更换本地映射端口或终止占用端口的进程。
高级配置:使用 SSH 密钥认证
为避免每次输入密码,可配置 SSH 密钥认证:
- 在本地生成密钥对:
ssh-keygen -t rsa。 - 将公钥复制到 SSH 服务器:
ssh-copy-id admin@203.0.113.1。 - 之后连接时无需密码,提升安全性。
自动化 SSH 隧道(可选)
如果需要保持隧道持续运行,可以使用 autossh 工具或在后台运行 SSH:

ssh -N -f -L 13306:127.0.0.1:3306 admin@203.0.113.1
-N 表示不执行远程命令,-f 表示后台运行。
相关问答 FAQs
Q1: SSH 隧道与直接连接数据库相比有什么优势?
A1: SSH 隧道的主要优势是安全性,它通过加密 SSH 连接传输数据,避免数据库端口直接暴露在公网上,减少被攻击的风险,SSH 隧道还可以绕过防火墙限制,因为只允许通过 SSH 端口(通常是 22)通信。
Q2: SSH 服务器重启,隧道会断开吗?如何保持持久连接?
A2: 是的,SSH 服务器重启会导致隧道断开,为保持持久连接,可以使用 autossh 工具自动重连,或在 SSH 命令中添加 -o ServerAliveInterval 60 -o ServerAliveCountMax 3 参数,定期发送保活包防止超时。