You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过服务器B构建SSH隧道,实现C连接A的MySQL服务

正确配置C连接A的MySQL的SSH隧道方案

你的场景核心是通过B作为中转节点打通C到A的MySQL连接,之前的隧道方向搞反了,我给你梳理下两步走的具体配置:

步骤1:在A上建立到B的反向端口转发

我们需要把A的MySQL 3306端口映射到B的一个空闲端口(比如选3337,避免和B上可能存在的服务冲突),并且允许C能访问B的这个端口。

在A上执行以下SSH命令:

ssh -R 0.0.0.0:3337:localhost:3306 b-user@B的IP地址
  • -R:表示反向端口转发,把本地(A)的localhost:3306映射到远程(B)的0.0.0.0:3337
  • 0.0.0.0:让B的3337端口监听所有网卡,这样C才能从外部访问这个端口(默认只监听localhost,C连不上)

关键配置检查(在B上操作)

为了让B允许外部访问这个转发的端口,需要修改B的SSH服务配置:

  1. 编辑/etc/ssh/sshd_config文件,找到GatewayPorts选项,改成:
GatewayPorts yes
  1. 重启B的SSH服务生效:
# 针对systemd系统(如Ubuntu、CentOS 7+)
systemctl restart sshd
# 针对SysVinit系统
service ssh restart
  1. 开放B的防火墙3337端口:
# 用ufw的Ubuntu/Debian
ufw allow 3337/tcp
ufw reload
# 用firewalld的CentOS/RHEL
firewall-cmd --add-port=3337/tcp --permanent
firewall-cmd --reload

步骤2:在C上连接A的MySQL

现在C只需要连接B的3337端口,就等于直接访问A的3306端口了。在C上执行MySQL客户端命令:

mysql -h B的IP地址 -P 3337 -u 你的MySQL用户名 -p

输入MySQL密码后就能正常连接A上的数据库了。

补充说明

  • 如果需要长期保持这个隧道连接,可以搭配autossh工具,避免SSH连接断开后隧道失效。
  • 确保A的MySQL配置允许localhost转发的请求(默认MySQL的bind-address设为127.0.0.1也能支持这种隧道访问)。

内容的提问来源于stack exchange,提问作者Sim Sca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:25:00