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 隧道
相关推荐
麒qiqi1 分钟前
进阶 IMX6ULL 裸机开发:从 C 语言点灯到 BSP 工程化(附 SDK / 链接脚本实战)
c语言·开发语言
weixin_462446231 分钟前
Python用Flask后端解析Excel图表,Vue3+ECharts前端动态还原(附全套代码)
前端·python·flask·echats
偷星星的贼117 分钟前
如何为开源Python项目做贡献?
jvm·数据库·python
秋刀鱼程序编程8 分钟前
Java基础入门(七)---异常处理
java·开发语言·python
遇见你的雩风10 分钟前
Java---多线程(一)
java·开发语言
二十雨辰11 分钟前
[python]-基础语法
python
小白学大数据11 分钟前
基于 Python 的知网文献批量采集与可视化分析
开发语言·爬虫·python·小程序
Ulyanov12 分钟前
PyVista战场可视化实战(一):构建3D战场环境的基础
开发语言·python·3d·tkinter·gui开发
fai厅的秃头姐!16 分钟前
01-python基础-day01python基础
python
霸道流氓气质22 分钟前
Java 实现折线图整点数据补全与标准化处理示例代码讲解
java·开发语言·windows