一条命令即可通过跳板机直连mariadb:配置ssh proxyjump隧道后执行ssh -fn db-tunnel,本地127.0.0.1:3307即映射至db.internal:3306,再用mysql -h 127.0.0.1 -p 3307 -u dbuser -p连接,全程不暴露数据库到公网。
跳板机直连 mariadb:一条命令就能进数据库
能。只要跳板机(如 jump-server.dealiaxy.com)可 ssh 访问,且目标 mariadb 服务(如 db.internal)在跳板机网络内可达,你完全可以在本地终端用一条 ssh 命令建立隧道,再让客户端(如 mysql、datagrip、dbeaver)连这个本地端口——整个过程不暴露数据库到公网,也不需要手动登录跳板机。
用 ProxyJump 快速建 SSH 隧道(推荐 OpenSSH 7.3+)
这是最干净的做法:SSH 自动完成“本地 → 跳板机 → 目标数据库”三层转发,你只需配置一次,后续所有连接都复用。
-
~/.ssh/config中添加如下段落:
Host db-tunnel
HostName db.internal
User dbuser
Port 3306
ProxyJump jump-server.dealiaxy.com
LocalForward 3307 127.0.0.1:3306
- 执行
ssh -fN db-tunnel后台启动隧道(-fN表示不打开 shell,只建转发) - 此时本地
127.0.0.1:3307就等价于db.internal:3306,直接连:mysql -h 127.0.0.1 -P 3307 -u dbuser -p - 常见坑:
db.internal是跳板机能解析的主机名,不是你本地能解析的;如果跳板机用的是非标准端口(如10023),需在ProxyJump行后加@10023或单独配jump-server.dealiaxy.com的端口
DataGrip / DBeaver 连接时填错 SSH 配置项
这类 GUI 工具的“SSH 隧道”设置里,最容易填反两个关键字段:
-
SSH 主机:必须填跳板机地址(如
jump-server.dealiaxy.com),不是数据库地址 -
数据库主机:填
127.0.0.1或localhost,因为从跳板机视角看,MariaDB 就在它自己本机或同网段 —— 不是填db.internal(除非你勾选了“使用远程主机名”,但多数情况不需要) - 密钥认证失败?确认私钥文件没加密,或已正确输入密码短语;若私钥有密码但工具不支持交互式输入,得先用
ssh-add加载到 agent - 测试连接报 “Connection refused”?先在本地跑
ssh -L 3307:db.internal:3306 jump-server.dealiaxy.com手动试通,排除网络和权限问题
MariaDB 侧必须允许跳板机 IP 连接
即使 SSH 隧道通了,MariaDB 默认只监听 127.0.0.1,或只允许特定 host,这步常被忽略。
- 登录跳板机,检查 MariaDB 是否监听内网接口:
ss -tlnp | grep :3306—— 若只看到127.0.0.1:3306,需改/etc/my.cnf.d/server.cnf中的bind-address为0.0.0.0或跳板机内网 IP - 确认数据库用户权限包含跳板机来源:
SELECT User, Host FROM mysql.user WHERE User = 'dbuser';
若Host是localhost,得执行:GRANT ALL ON testdb.* TO 'dbuser'@'10.10.20.50' IDENTIFIED BY 'xxx'; FLUSH PRIVILEGES;(10.10.20.50是跳板机内网 IP) - 防火墙别漏掉:跳板机上运行
sudo firewall-cmd --list-ports,确保没拦3306(或对应端口);CentOS/RHEL 默认关了mysqlservice,得手动开
跳板机不是透明管道,它是 MariaDB 看到的“客户端 IP”。所有访问控制、连接数限制、慢查询日志里的 client_host,都来自跳板机这一端——这点决定了权限、监控和排障思路完全不同。










