You need to enable JavaScript to run this app. 如何通过SSH跳板机将Django应用连接到AWS私有RDS实例
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SSH跳板机将Django应用连接到AWS私有RDS实例

如何通过SSH跳板机让本地Django连接AWS私有子网的RDS?

你遇到的报错本质是两个核心问题:

  1. 私有子网的RDS的Endpoint域名只有AWS VPC内部的DNS才能解析,你本地环境直接访问无法完成域名解析
  2. DBeaver连接成功是因为你在DBeaver中配置了SSH隧道代理,所有流量走跳板机转发,而你直接启动Django时没有配置对应的隧道,流量直接访问公网自然找不到私有RDS地址

方案1:手动建立SSH端口转发(适合临时调试)

在本地终端执行以下命令建立本地端口到RDS的SSH转发,流量会自动通过跳板机中转:

ssh -N -L 5433:xxx.zzz.us-east-z.rds.amazonaws.com:5432 ec2-user@<跳板机公网IP> -i <你的跳板机私钥文件路径>

参数说明:

  • -N:不执行远程命令,仅做端口转发
  • -L:本地端口转发规则,格式为本地端口:RDS域名:RDS端口

命令执行后保持终端窗口不关闭,修改Django的数据库配置即可:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "aaaa",
        "USER": "bbbb",
        "PASSWORD": "cccc",
        "HOST": "127.0.0.1", # 改为本地地址
        "PORT": 5433, # 改为转发的本地端口
    }
}

方案2:代码中自动维护SSH隧道(适合本地开发场景)

如果不想一直保持终端窗口开启,可以用sshtunnel库在Django启动时自动建立隧道:

  1. 先安装依赖
pip install sshtunnel
  1. 修改settings.py配置
from sshtunnel import SSHTunnelForwarder

# 启动SSH隧道
tunnel = SSHTunnelForwarder(
    ('<跳板机公网IP>', 22),
    ssh_username='ec2-user',
    ssh_pkey='<你的跳板机私钥文件路径>',
    remote_bind_address=('xxx.zzz.us-east-z.rds.amazonaws.com', 5432)
)
tunnel.start()

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "aaaa",
        "USER": "bbbb",
        "PASSWORD": "cccc",
        "HOST": "127.0.0.1",
        "PORT": tunnel.local_bind_port, # 自动获取隧道绑定的本地端口
    }
}

注意事项

  • 以上两个方案仅适用于本地开发调试场景,生产环境的Django服务请部署在与RDS同VPC的子网内,无需通过跳板机访问RDS
  • 请确认跳板机安全组已放行本地IP的22端口访问,RDS安全组已放行跳板机私有IP的5432端口访问
  • 若本地端口5432被占用,可更换为其他未被占用的端口(如5433等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:27:04