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 隧道
相关推荐
小江的记录本1 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
APIshop2 小时前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化
deepin_sir2 小时前
10 - 函数
开发语言·python
z落落2 小时前
C#String字符串
开发语言·c#·php
猫头虎-前端技术2 小时前
JS 作用域与闭包:从变量提升到闭包陷阱的超详细解析
开发语言·javascript·云计算·bootstrap·ecmascript·openstack·perl
charlee443 小时前
《GIS基础原理与技术实践》配套案例(Python版)
python·conda·numpy·gis·环境配置
枫叶林FYL3 小时前
项目十:事件溯源仓储管理系统(WMS)仿真实现
开发语言·python
繁华落尽,倾城殇?3 小时前
[C++11] : atomic,nullptr,default/delete,enum class
开发语言·c++·c++11·nullptr·atomic·enum class·default/delete
01_ice3 小时前
C语言数据在内存中的存储
c语言·开发语言
代码村新手3 小时前
C++-二叉搜索树
开发语言·c++