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

如何通过经ALB访问的EC2实例建立到RDS的SSH隧道?

问题解答:通过ALB建立SSH隧道及替代方案

核心结论

不能通过Application Load Balancer (ALB) 建立SSH隧道。ALB是七层负载均衡,仅处理HTTP/HTTPS协议流量,不支持SSH(TCP 22端口)的转发,因此无法作为SSH隧道的入口。

推荐方案

方案1:使用AWS Systems Manager (SSM) 实现端口转发

这是最安全且无需额外资源的方案,适配你的私有子网EC2场景:

  • 前提:Elastic Beanstalk的Amazon Linux 2/2023实例默认预装了SSM Agent,只需给EC2实例的IAM角色添加AmazonSSMManagedInstanceCore权限
  • 操作步骤:
    1. 本地安装并配置AWS CLI(确保已配置有效凭证)
    2. 执行以下命令建立到RDS的端口转发(替换占位符为你的实际信息):
      aws ssm start-session --target <EC2实例ID> --document-name AWS-StartPortForwardingSession --parameters '{"portNumber": ["3306"], "localPortNumber": ["3306"], "host": ["<RDS实例端点>"]}'
      
    3. 直接用MySQL客户端连接localhost:3306即可,无需额外SSH隧道配置

方案2:部署堡垒主机

如果偏好传统SSH方式,可在公有子网部署堡垒主机:

  • 配置步骤:
    1. 在公有子网创建一台EC2堡垒主机,安全组仅开放22端口给你的本地IP
    2. 配置安全组规则:
      • 堡垒主机安全组允许访问私有子网EC2的22端口
      • 私有子网EC2安全组允许堡垒主机的SSH访问
      • RDS安全组允许私有子网EC2的3306端口访问
    3. 本地通过堡垒主机建立SSH隧道到RDS(替换占位符):
      ssh -i "你的密钥文件.pem" -L 3306:<RDS实例端点>:3306 ec2-user@<堡垒主机公网IP>
      
    之后即可按照你提供的MySQL Workbench SSH连接设置图的逻辑,连接localhost:3306访问RDS。

Elastic Beanstalk环境提示

  • 优先选择SSM方案,无需修改现有Elastic Beanstalk的负载均衡或子网配置
  • ALB不支持TCP协议的非HTTP/HTTPS转发,请勿尝试修改ALB监听规则适配SSH流量(如需TCP转发需使用Network Load Balancer,但Elastic Beanstalk默认配置为ALB)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:29