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

通过SSH隧道经跳板机访问私有子网EC2上的MySQL失败求助

问题:通过SSH隧道访问私有子网EC2上的MySQL失败

环境配置

  • 私有子网内的EC2实例,部署MySQL数据库
  • 公有子网内的EC2实例,作为跳板机(bastion/jump host)

已成功通过跳板机SSH登录到私有子网EC2,但无法通过SSH隧道让本地工具(TablePlus、Tableau等)访问私有实例上的MySQL。

使用的SSH隧道命令

ssh -A ubuntu@ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -L 3307:ubuntu@xxx.xxx.xxx.xxx:3306 -N -f -v

本地测试结果

➜  ~ lsof -i4 -P | grep -i "listen" | grep 3307
ssh       95829 wild    8u  IPv4 0x35f42fb5d0e0a22b      0t0  TCP localhost:3307 (LISTEN)
➜  ~ nc -zv 127.0.0.1 3307
Connection to 127.0.0.1 port 3307 [tcp/opsession-prxy] succeeded!
➜  ~ mysql -h 127.0.0.1 -P 3307 -u my-username -p
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

服务器端SSH调试日志

debug1: Connection to port 3307 forwarding to ubuntu@xxx.xxx.xxx.xxx port 3306 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Name or service not known
debug1: channel 2: free: direct-tcpip: listening port 3307 for ubuntu@xxx.xxx.xxx.xxx port 3306, connect from 127.0.0.1 port 59686 to 127.0.0.1 port 3307, nchannels 3

解决方案

1. 修正SSH隧道命令的目标地址格式

-L参数的正确格式是本地端口:目标主机IP:目标端口,不需要附加用户名。把命令里的ubuntu@xxx.xxx.xxx.xxx改成私有EC2的私有IP即可:

ssh -A ubuntu@ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -L 3307:xxx.xxx.xxx.xxx:3306 -N -f -v

2. 检查MySQL的绑定配置

修改MySQL配置文件(my.cnf或mysqld.cnf),确保bind-address设置为0.0.0.0或私有EC2的私有IP,允许跳板机访问。修改后重启MySQL服务:

sudo systemctl restart mysql

3. 验证私有EC2的安全组规则

确保私有EC2的安全组允许来自跳板机私有IP的3306端口入站流量。

4. 测试跳板机到私有EC2的MySQL连通性

在跳板机上执行以下命令,确认能直接访问私有EC2的MySQL:

mysql -h xxx.xxx.xxx.xxx -u my-username -p

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:35:14