python开启ssh端口转发

python开启ssh端口转发

需求

db_server机器上运行了一个mysql数据库,仅允许ops机器连接,ecs机器可以连接ops机器,但是连不到db_server。

问:ecs如何能连接到db_server机器上的mysql数据库

代码示例

python 复制代码
# 导入必要的库
from sshtunnel import SSHTunnelForwarder  # 用于建立 SSH 隧道
import pymysql                            # 用于连接和操作 MySQL 数据库

# 使用 SSH 隧道转发器(SSHTunnelForwarder)建立安全隧道
# 该隧道将本地端口(127.0.0.1:3308)转发到远程 MySQL 服务器(通过跳板机)
with SSHTunnelForwarder(
    ssh_address_or_host=('ops机器IP', ops机器SSH端口),  # 跳板机(堡垒机)的 IP 和 SSH 端口
    ssh_username='ops_username',                        # 登录跳板机的用户名
    ssh_password='ops_password',                        # 登录跳板机的密码(建议改用私钥认证更安全)
    remote_bind_address=('MinIRDs内网地址', 3306),      # 目标 MySQL 服务器的内网地址和端口(通常为 3306)
    local_bind_address=('127.0.0.1', 3308)             # 本地绑定的地址和端口,用于后续连接
) as tunnel:
    # 隧道建立成功后,通过本地 127.0.0.1:3308 连接到远程 MySQL(实际流量经 SSH 隧道加密转发)
    connection = pymysql.connect(
        host='127.0.0.1',        # 连接本地回环地址(因为隧道已将远程数据库映射到本地)
        port=3308,               # 使用隧道绑定的本地端口
        user='mysql_username',   # MySQL 数据库用户名
        password='mysql_password',  # MySQL 数据库密码
        database='your_database'    # 要连接的具体数据库名
    )
    
    # 在此处执行你的数据库操作,例如查询、插入、更新等
    # 示例:
    # cursor = connection.cursor()
    # cursor.execute("SELECT * FROM your_table")
    # results = cursor.fetchall()
    # ...
    
    # 操作完成后,关闭数据库连接
    connection.close()

# with 语句结束时,SSHTunnelForwarder 会自动关闭 SSH 隧道
相关推荐
Java后端的Ai之路16 小时前
【Python 教程15】-Python和Web
python
冬奇Lab17 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
灰子学技术19 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰19 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码19 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚19 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂20 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13620 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐20 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
前端摸鱼匠20 小时前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测