《python》paramiko+paramiko实现远程通过ssh通道连接数据库

阿丹:

在一些特定的场景下面,需要使用线上的数据库。但是正常使用连接肯定是连接不上的,所以这里就需要使用ssh通道来连接线上的数据库。

复制代码
pip install paramiko pymysql

下面是示例代码:

python 复制代码
import paramiko
import pymysql

# SSH隧道配置
ssh_host = 'your_ssh_server_ip'
ssh_port = 22
ssh_user = 'your_ssh_username'
ssh_password = 'your_ssh_password'

# MySQL数据库配置
mysql_host = 'your_mysql_host_or_ip'  # 这里填写MySQL的实际地址,如果通过SSH隧道访问localhost即可
mysql_port = 3306
mysql_user = 'your_mysql_username'
mysql_password = 'your_mysql_password'
mysql_db = 'your_database_name'

def create_ssh_tunnel(ssh_host, ssh_port, ssh_user, ssh_password, remote_bind_address, local_bind_port):
    """创建SSH隧道"""
    transport = paramiko.Transport((ssh_host, ssh_port))
    transport.connect(username=ssh_user, password=ssh_password)
    
    # 设置转发规则,将本地端口转发到远程MySQL服务器
    channel = transport.open_channel("direct-tcpip", (remote_bind_address, mysql_port), ('', local_bind_port))
    return channel

def query_mysql_via_tunnel(mysql_user, mysql_password, mysql_db, local_bind_port):
    """通过SSH隧道连接MySQL并执行查询"""
    conn = pymysql.connect(host='127.0.0.1', port=local_bind_port, user=mysql_user, passwd=mysql_password, db=mysql_db)
    try:
        with conn.cursor() as cursor:
            cursor.execute('SELECT VERSION()')
            result = cursor.fetchone()
            print("MySQL version:", result)
    finally:
        conn.close()

if __name__ == "__main__":
    # 创建SSH隧道
    local_bind_port = 3307  # 选择一个未被占用的本地端口
    tunnel = create_ssh_tunnel(ssh_host, ssh_port, ssh_user, ssh_password, (mysql_host, mysql_port), local_bind_port)
    
    try:
        # 通过隧道连接MySQL并执行查询
        query_mysql_via_tunnel(mysql_user, mysql_password, mysql_db, local_bind_port)
    finally:
        # 关闭SSH连接
        tunnel.close()

请注意,需要将上述代码中的your_ssh_server_ip、your_ssh_username、your_ssh_password、your_mysql_host_or_ip、your_mysql_username、your_mysql_password以及your_database_name替换为实际的值。此外,确保你有权限通过SSH访问目标服务器,并且MySQL服务器允许来自SSH服务器的连接。

相关推荐
꯭自꯭闭꯭5 小时前
达梦事物特性及MVCC
linux·运维·数据库
亚川楼宇自控系统数据中心厂家6 小时前
实验室智能化管理系统|人环物智一体化管控平台
运维
zmsup8 小时前
Agent 上下文调优:结合 OpsArk 运维智能体,设计模型每一步真正需要的信息
运维·agent·上下文压缩·运维智能体·上下文调优
吴声子夜歌10 小时前
Nginx应用与运维——Nginx负载均衡应用实战(二)
运维·nginx·负载均衡
lisanmengmeng10 小时前
NRPE 添加命令(一)
linux·运维·服务器
pt104310 小时前
CML网络仿真入门-2:使用CML模拟网络实验环境
运维·网络协议
沫璃染墨12 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
HAHAXX812 小时前
电商RPA批量上架通用方案:一套流程如何同时跑通拼多多、抖店、淘宝和跨境平台
java·运维·rpa
零基础12312 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
程序猿老A13 小时前
从入门型到企业型:云服务器开放共享型到独享型规格升级
运维·服务器