zoukankan      html  css  js  c++  java
  • Python ssh连接数据库

    最近在国外的服务器上跑爬虫脚本需要连接到国内内网的数据库,其间遇见了一些问题,这里提供一些解决方法。

    首先什么是SSH:

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

    为了解决这个问题需要涉及两个模块:mysql和sshtunnel

    import mysql.connector
    import sshtunnel
    
    with sshtunnel.SSHTunnelForwarder(
            ('这里填远程服务器的地址', 这里填端口号),
            ssh_username='服务器的用户名,不是数据库的!!!',
            ssh_password='服务器的密码',
            remote_bind_address=('数据库的地址', 数据库端口号,一般都是3306),
            local_bind_address=('127.0.0.1', 13306)
    ) as tunnel:
        conn = mysql.connector.connect(
            user='数据库的用户名',
            password='数据库的密码',
            host='127.0.0.1',
            port=13306,
            database='需要连接的库名',
        )
        cursor = conn.cursor()
        query = "select version();"
        cursor.execute(query)
        data = cursor.fetchall()
        print(data)

    另一种方式使用sshtunnel+pymysql:

    import sshtunnel
    improt pymysql

    server =sshtunnel.SSHTunnelForwarder(
            ('这里填远程服务器的地址', 这里填端口号),
            ssh_username='服务器的用户名,不是数据库的!!!',
            ssh_password='服务器的密码',
            remote_bind_address=('数据库的地址', 数据库端口号,一般都是3306),
            local_bind_address=('127.0.0.1', 13306)
    )
    server.start()
    conn = pymysql.connect(
    user='mysql账号',
    password='mysql密码',
    host='127.0.0.1', #必须为本机回环地址,原因会在下面写出
    port=端口号,
    database='数据库名',
    )
    cursor = conn.cursor()
    query = "select version();"
    cursor.execute(query)
    data = cursor.fetchall()
    print(data)

    原理大概就是这样: 

    首先通过 sshtunnel.SSHTunnelForwarder 进行端口映射,将远程服务器的3306端口映射到本地的13306端口,再连接本地的端口,那么后续对本地13306端口的操作其实都可以视为对线上服务器3306端口的操作,理论上来说,PuTTY也是进行了相同的操作,以此达到内网穿透的目的。

    有几点需要特别注意:

    1.写端口号的时候切记不要加引号!!!
    2.最上面的那个连接信息一定是服务器的,不是数据库的!!!
    3.绑定的本地端口号不一定非要是13306,只要没有端口冲突都行!!!
    4.如果密码中有‘’,切记一定要用‘\’进行转义!!!

    https://blog.csdn.net/zgbzbl/article/details/107081320 如果还是看不懂可作参考

  • 相关阅读:
    UI系统的分类
    DSL的概念
    什么是“图灵完备”?
    UI系统的作用
    redis——持久化方式RDB与AOF分析
    Redis能做什么?不能做什么?
    PHP Ajax 跨域问题最佳解决方案
    charles和Fiddler感觉哪个更好用
    Fiddler工具使用介绍一
    Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
  • 原文地址:https://www.cnblogs.com/Pynu/p/14985109.html
Copyright © 2011-2022 走看看