【问题标题】:Python MySQL Connection with SSH使用 SSH 的 Python MySQL 连接
【发布时间】:2020-08-08 09:27:07
【问题描述】:

您好,我买了一个共享主机,它只允许使用 SSH 远程连接 MySQL。

到目前为止,我知道它没有任何公钥或私钥..

这是我在 MySQL Workbench 上的连接设置,当我尝试连接时它可以工作:

我查看了另一个 stackoverflow 问题:Here 但似乎没有一个答案对我有用.. :/ 我真的处于死胡同,我需要让它工作。有人可以帮帮我吗?

【问题讨论】:

  • 因此,该线程上的最佳答案看起来像是执行此操作的公认方式。我个人只做过一次。当您尝试实现它时到底发生了什么?另请注意,该线程位于 python 2.7 中,因此需要进行一些调整以使其在 3.x 中工作
  • @Rashid'Lee'Ibrahim 老实说.. 一些答案给我带来了错误,比如失去连接。我尝试的一些答案不会输出任何东西,就好像它被卡在了一个while循环中。
  • 因此,有了上面的最佳答案,您应该获得“无限循环”的效果,但实际上连接是打开的。使用 ssh 隧道,您将不会有一个开放的 sql 连接,您可以将其传递给其他对象。您将连接,进行查询,然后您必须关闭连接才能让程序实际继续运行。

标签: python mysql ssh


【解决方案1】:

所以我经过一百万次反复试验才弄明白:

import pymysql
import paramiko
import pandas as pd
from paramiko import SSHClient
from sshtunnel import SSHTunnelForwarder

ssh_host = '198.54.xx.xx'
ssh_host_port = 21098 #Ur SSH port
ssh_username = "sshuser123" #Change this
ssh_password = "sshpassword123" #Change this

db_user = 'db user' #change this
db_password = 'password123' #change this
db = 'main_db' #The db that the user is linked to


with SSHTunnelForwarder(
        (ssh_host, ssh_host_port),
        ssh_username=ssh_username,
        ssh_password=ssh_password,
        remote_bind_address=('127.0.0.1', 3306)) as tunnel:
    conn = pymysql.connect(host='127.0.0.1', user=db_user,
            passwd=db_password, db=db,
            port=tunnel.local_bind_port)
    query = '''SELECT * from tablename;'''
    data = pd.read_sql_query(query, conn)
    print(data)
    conn.close()

如果您在 MySql 上的 SSH 没有任何公钥/私钥,这是您应该使用的代码。

希望这可以帮助任何面临同样问题的人!

【讨论】:

    【解决方案2】:
    1. 通过带有端口转发的 ssh 连接到服务器 198.54.x.240:21098 喜欢ssh -t -gL 33069:localhost:3306 198.54.x.240 在 Windows 中使用 PuTTY,我喜欢 KiTTy(fork putty) 添加连接和SSH隧道看图片
    2. 通过 localhost:33069 (answer you know)WorkBench 连接到 MySQL 做同样的事情,但是 3306 上的 3306,如果您需要超过 1 个远程连接最佳做法转发不同的端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 2014-03-21
      • 2015-10-02
      • 2014-02-18
      相关资源
      最近更新 更多