首页 > 编程语言 >Python下Django通过SSHTunnel连接ECS上未开通外网地址RDS的解决方案

Python下Django通过SSHTunnel连接ECS上未开通外网地址RDS的解决方案

时间:2024-03-15 15:55:38浏览次数:33  
标签:RDS Python 连接 ECS ssh mysql Django SSHTunnel SSH

在开发过程中,碰到需要在 Python Django 项目中连接到位于 ECS 上但未开通外网地址的 RDS 数据库。

这种情况下,通过建立 SSH 隧道来实现连接,确保数据传输的安全性和可靠性。

 

1、安装 sshtunnel 包

pip3 install sshtunnel

2、导入 SSHTunnelFowarder 模块

from sshtunnel import SSHTunnelForwarder

3、使用 SSHTunnelFowarder 类来创建一个 SSH 隧道,将本地主机的某个端口映射到远程服务器的指定端口上

1 def get_ssh_tunnel():
2     server = SSHTunnelForwarder(
      # 此处填入 ECS 的外网 ip 地址以及 ssh 的端口号(默认22) 3 ("xxx.xxx.xxx.xxx", 22),
      # 填入 ECS 的用户名和密码 4 ssh_username="your_ssh_username", 5 ssh_password="your_ssh_password",
      # 填入 RDS 数据库的内网地址以及端口号(默认3306) 6 remote_bind_address=("mysql_host", 3306) 7 ) 8 server.start() 9 return server

 4、获取 SSH 隧道对象

10 ssh_tunnel = get_ssh_tunnel()

 5、Django 数据库配置

11 DATABASES = {
12     'default': {
13         'ENGINE': 'django.db.backends.mysql',
       # 填入要连接的 mysql 数据库名、用户名、密码 14 'NAME': 'mysql_db', 15 'USER': 'mysql_user', 16 'PASSWORD': 'mysql_password',
       # 此处 HOST 参数必须为 127.0.0.1 17 'HOST': "127.0.0.1", 18 'PORT': ssh_tunnel.local_bind_port 19 } 20 }

 

通过在本地主机(127.0.0.1)上建立 SSH 隧道连接到远程 MySQL 服务器,实际上是将本地主机的某个端口映射到远程 MySQL 服务器的端口上。

因此,将 "HOST" 设置为 "127.0.0.1" 表示连接到本地主机,而不是直接连接到远程 MySQL 服务器。

 

标签:RDS,Python,连接,ECS,ssh,mysql,Django,SSHTunnel,SSH
From: https://www.cnblogs.com/shinonomeasahi/p/18075570

相关文章

  • 快速上手Python爬虫,轻松掌握技巧!
    很多人都听说过爬虫,我也不例外。曾看到别人编写的爬虫代码,虽然没有深入研究,但感觉非常强大。因此,今天我决定从零开始,花费仅5分钟学习入门爬虫技术,以后只需轻轻一爬就能查看所有感兴趣的网站内容。广告?不存在的,因为我看不见。爬虫只会获取我感兴趣的信息,不需要的内容对我而言只......
  • Python 函数的不定长参数介绍 -- argc/*argcs/**kargcs
    目录一.前言二.Python不定长参数argc/*kargcs简介1.函数不定长参数*args使用2.函数不定长参数**kwargs使用3.函数不定长参数*args和**kwargs只能放在形参的末尾,顺序不能错.三.Python不定长参数argc/*kargcs实战四.Python不定长参数argc/*kargcs总结五......
  • Python3 stdout read readline 阻塞情况简单说明
         Python3stdoutreadreadline阻塞情况简单说明 执行命令行,并获取返回结果。代码1:process=subprocess.Popen(cmd_string,stdout=subprocess.PIPE,\      universal_newlines=True,\      stderr=subprocess.PIPE,\    ......
  • python bytes格式的一些转换
    importbinascii#中文字符串转bytess="中国"b=s.encode("utf-8")print(b)#输出:b'\xe4\xb8\xad\xe5\x9b\xbd'#bytes转字符串,默认utf-8解码print(b.decode())#输出:中国#16进制字符串转byteshex_s="e4b8ade59bbd"b=bytes.fromhex(he......
  • Python的基本语法
    Python的基本语法是学习这门语言的起点。以下是一些关键的语法概念和规则,它们构成了Python编程的基础:1.**缩进**:  -Python使用缩进来定义代码块,而不是使用大括号或其他符号。通常,缩进使用4个空格。  -缩进在定义函数、循环、条件语句等结构时非常重要。  ```py......
  • 基于python+django的协同过滤算法的小说推荐系统
    摘 要随着世界经济信息化、全球网络化的到来推动信息线上管理的飞速发展,为小说推荐的管理起到关件作用。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的小说推荐系统,通过此网站爬虫技术获取数据。当前的银行用户行为管理存在工作效率......
  • Python Seaborn库中的figure与grid
    在使用Seaborn(通常与Matplotlib库一起使用)进行绘图时,plt.figure()和plt.grid()的先后顺序确实会影响最终的出图效果。这里的plt通常是指Matplotlib的pyplot模块,它是Matplotlib的绘图框架,而Seaborn是建立在Matplotlib之上的高级绘图库,用于更复杂的数据可视化。plt......
  • 想学一门技术或者搞副业,学什么最靠谱?当然是Python!清华教授35天python教程脑图,让你学习
    想学一门技术或者搞副业,学什么最靠谱?派森君告诉你:当然是Python。为什么呢?Python语言是所有语言中最好上手的语言,简单易学。只要是懂一点英语,逻辑思维不是很差的人很快就能学会。一方面Python作为一门全场景编程语言,当前的应用边界在不断扩展,相信随着大数据、人工智能等技......
  • 2024最新整理Python入门教程(超详细),从零基础入门到精通,看完这一篇就够了
    前言本文罗列了Python零基础入门到精通的详细教程,内容均以知识目录的形式展开。01.python由来与发展介绍02.项目开发流程【文末有惊喜福利......
  • 【Python】一个实用的爬虫代码示例
    目录思路代码实现反爬需要爬取某个网站的前10个页面的图片,图片包括风景类或者人物类思路使用Python爬取某个网站的前10个页面的图片,并且只获取风景或人物类图片,可以按照以下步骤实现:发送HTTP请求:使用requests库向目标网站发送GET请求,获取页面的HTML内容......