首页 > 数据库 > mysql教程 > 如何在 Python 中通过 SSH 隧道安全连接到 MySQL?

如何在 Python 中通过 SSH 隧道安全连接到 MySQL?

Patricia Arquette
发布: 2024-12-21 16:25:10
原创
492 人浏览过

How to Securely Connect to MySQL via SSH Tunneling in Python?

通过 SSH 隧道将 Python 连接到 MySQL

在 Python 应用程序中,通常需要访问 MySQL 数据库。要建立安全连接,一种技术涉及使用 SSH 隧道。本文探讨了如何利用 SSH 密钥对创建 SSH 隧道并通过 Python 促进 MySQL 连接。

考虑以下 Python 代码:

import MySQLdb
db = MySQLdb.connect(host="sql.domain.com",
     user="dev", 
      passwd="*******", 
      db="appdb")
登录后复制

虽然上面的代码建立了直接连接到MySQL服务器,可能存在需要SSH隧道以增强安全性的场景。 SSH 隧道对连接进行加密,提供安全的通信通道。

要设置 SSH 隧道并使用 Python 连接到 MySQL,请按照以下步骤操作:

  1. 导入所需模块: 在您的 Python 脚本中,包含必要的模块,包括 pymysql、paramiko、pandas 和sshtunnel。
  2. 建立 SSH 连接: 使用 paramiko 创建 SSH 客户端并连接到 SSH 服务器。指定主机、用户名和私钥路径。
  3. 配置 SSH 隧道: 利用 sshtunnel 模块创建 SSH TunnelForwarder 对象。将远程绑定地址定义为MySQL服务器主机名和端口。
  4. 建立MySQL连接:使用pymysql通过SSH隧道连接到本地MySQL服务器。指定端口作为 SSH 隧道的本地绑定端口。
  5. 执行查询:通过已建立的 MySQL 连接照常运行 SQL 查询。
  6. 关闭连接:完成操作后,关闭MySQL和SSH连接以释放

下面是演示这些步骤的示例代码片段:

import pymysql
import paramiko
import pandas as pd
from paramiko import SSHClient
from sshtunnel import SSHTunnelForwarder
from os.path import expanduser

# SSH Parameters
home = expanduser('~')
mypkey = paramiko.RSAKey.from_private_key_file(home + pkeyfilepath)
ssh_host = 'ssh_hostname'
ssh_user = 'ssh_username'
ssh_port = 22

# MySQL Parameters
sql_hostname = 'sql_hostname'
sql_username = 'sql_username'
sql_password = 'sql_password'
sql_main_database = 'db_name'
sql_port = 3306

with SSHTunnelForwarder(
        (ssh_host, ssh_port),
        ssh_username=ssh_user,
        ssh_pkey=mypkey,
        remote_bind_address=(sql_hostname, sql_port)) as tunnel:
    conn = pymysql.connect(host='127.0.0.1', user=sql_username,
            passwd=sql_password, db=sql_main_database,
            port=tunnel.local_bind_port)
    # Perform database operations here...
    conn.close()
登录后复制

通过实施这些技术,您可以通过 Python 中的 SSH 隧道安全地连接到 MySQL 服务器。这种方法可确保数据的机密性和完整性,使其适合需要增强安全措施的应用程序。

以上是如何在 Python 中通过 SSH 隧道安全连接到 MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板