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 分钟前
django的模板渲染、for循环标签、继承模板
数据库·python·django
飞Link2 分钟前
【Anaconda】Linux(CentOS7)下安装Anaconda教程
linux·运维·python
web3.088899910 分钟前
小红书笔记评论API接口详情展示
开发语言·笔记·python
手抄二进制11 分钟前
使用Anaconda创建python环境并链接到Jupyter
开发语言·python·jupyter
知凡D24 分钟前
python脚本打包成exe后,对其引用的日历库实时更新-动态化加载模块
python·测试工具
古城小栈32 分钟前
go-zero 从入门到实战 全指南(包的)
开发语言·后端·golang
kobe_OKOK_39 分钟前
快递鸟对接发快递后端设计系统
python·django
阿蔹40 分钟前
UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作
前端·python·selenium·ui·自动化
lsx20240643 分钟前
Python 3 函数
开发语言
Tipriest_43 分钟前
配置用户pip源与查看当前的pip的源的办法
linux·人工智能·python·pip