首页 > 解决方案 > 如何在 python 中通过 ssh 连接到 mysql localhost?

问题描述

我正在尝试在 python 上使用 ssh 连接到 localhost mysql 上的数据库。使用终端和 PyChar 的数据源,连接到数据库。

with SSHTunnelForwarder(
    (ssh_host, ssh_port),
    ssh_username=ssh_user,
    ssh_password=ssh_pass,
    remote_bind_address=('127.0.0.1', 3306),
    logger=create_logger(loglevel=1)) as tunnel:

with pymysql.connect(host='127.0.0.1',
                     user=db_user,
                     passwd=db_pass,
                     db=db_name,
                     port=tunnel.local_bind_port) as connection:

    print("!!!!!!!!!CONNECTED!!!!!!!!!!!")
    output = connection.execute("select * from BD.b_catalog limit 1")
    print(output)

我正在尝试使用 SSHTunnelForwarder 进行连接,但没有任何结果。我看不到带有连接消息的珍贵印刷品。

记录仪:

2020-10-09 17:19:39,977| WAR | MainThrea/0964@sshtunnel | Could not read SSH configuration file: ~/.ssh/config
2020-10-09 17:19:39,977| INF | MainThrea/0992@sshtunnel | 0 keys loaded from agent
2020-10-09 17:19:39,977| INF | MainThrea/1040@sshtunnel | 0 keys loaded from host directory
2020-10-09 17:19:39,977| INF | MainThrea/0910@sshtunnel | Connecting to gateway: 83.220.172.208:22 as user 'root'
2020-10-09 17:19:39,977| DEB | MainThrea/0915@sshtunnel | Concurrent connections allowed: True
2020-10-09 17:19:39,977| DEB | MainThrea/1367@sshtunnel | Trying to log in with password: *************
2020-10-09 17:19:40,155| INF | Srv-38583/1386@sshtunnel | Opening tunnel: 0.0.0.0:38583 <> 127.0.0.1:3306
2020-10-09 17:19:41,160| TRA |  Thread-3/0349@sshtunnel | #1 <-- ('127.0.0.1', 58390) to ('127.0.0.1', 3306) was rejected by the SSH server
2020-10-09 17:19:41,160| ERR |  Thread-3/0384@sshtunnel | Could not establish connection from ('127.0.0.1', 38583) to remote side of the tunnel
2020-10-09 17:19:41,160| INF | MainThrea/1407@sshtunnel | Shutting down tunnel ('0.0.0.0', 38583)
2020-10-09 17:19:41,221| WAR |  Thread-1/1819@transport | Success for unrequested channel! [??]
2020-10-09 17:19:41,260| INF | Srv-38583/1392@sshtunnel | Tunnel: 0.0.0.0:38583 <> 127.0.0.1:3306 released
2020-10-09 17:19:41,260| DEB | MainThrea/1421@sshtunnel | Transport is closed

和错误信息:

...
packet_header = self._read_bytes(4)
  File "/home/kvando/PycharmProjects/py_scrapy/venv/lib/python3.8/site-packages/pymysql/connections.py", line 698, in _read_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

标签: pythonmysqlssh

解决方案


推荐阅读