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


    阿丹:

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

    pip install paramiko pymysql

    下面是示例代码:

    1. import paramiko
    2. import pymysql
    3. # SSH隧道配置
    4. ssh_host = 'your_ssh_server_ip'
    5. ssh_port = 22
    6. ssh_user = 'your_ssh_username'
    7. ssh_password = 'your_ssh_password'
    8. # MySQL数据库配置
    9. mysql_host = 'your_mysql_host_or_ip' # 这里填写MySQL的实际地址,如果通过SSH隧道访问localhost即可
    10. mysql_port = 3306
    11. mysql_user = 'your_mysql_username'
    12. mysql_password = 'your_mysql_password'
    13. mysql_db = 'your_database_name'
    14. def create_ssh_tunnel(ssh_host, ssh_port, ssh_user, ssh_password, remote_bind_address, local_bind_port):
    15. """创建SSH隧道"""
    16. transport = paramiko.Transport((ssh_host, ssh_port))
    17. transport.connect(username=ssh_user, password=ssh_password)
    18. # 设置转发规则,将本地端口转发到远程MySQL服务器
    19. channel = transport.open_channel("direct-tcpip", (remote_bind_address, mysql_port), ('', local_bind_port))
    20. return channel
    21. def query_mysql_via_tunnel(mysql_user, mysql_password, mysql_db, local_bind_port):
    22. """通过SSH隧道连接MySQL并执行查询"""
    23. conn = pymysql.connect(host='127.0.0.1', port=local_bind_port, user=mysql_user, passwd=mysql_password, db=mysql_db)
    24. try:
    25. with conn.cursor() as cursor:
    26. cursor.execute('SELECT VERSION()')
    27. result = cursor.fetchone()
    28. print("MySQL version:", result)
    29. finally:
    30. conn.close()
    31. if __name__ == "__main__":
    32. # 创建SSH隧道
    33. local_bind_port = 3307 # 选择一个未被占用的本地端口
    34. tunnel = create_ssh_tunnel(ssh_host, ssh_port, ssh_user, ssh_password, (mysql_host, mysql_port), local_bind_port)
    35. try:
    36. # 通过隧道连接MySQL并执行查询
    37. query_mysql_via_tunnel(mysql_user, mysql_password, mysql_db, local_bind_port)
    38. finally:
    39. # 关闭SSH连接
    40. tunnel.close()

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

  • 相关阅读:
    期权开户流程、交易时间和规则详解清晰易懂
    1. 什么是微服务 ?
    Oauth2的核心概念
    SpringCloudAlibaba之gateway网关
    HTTP,HTTPS,WebSocket协议辨析
    项目中用的网关Gateway及SpringCloud
    [算法]数组给定长度的所有排列
    scipy.optimize.minimize函数介绍
    python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
    网页自适应
  • 原文地址:https://blog.csdn.net/weixin_72186894/article/details/139628490