python sshtunnel没有启动服务器给定凭据

Posted

技术标签:

【中文标题】python sshtunnel没有启动服务器给定凭据【英文标题】:python sshtunnel not starting server given credentials 【发布时间】:2021-11-12 16:19:41 【问题描述】:

所以我试图让mysql-connector-pythonsshtunnel 合作

with SSHTunnelForwarder(('192.168.0.1', 22), ssh_username='pi', ssh_password='*********', remote_bind_address=('localhost', 3306)) as tunnel:
    tunnel.start()
    mydb = mysql.connector.connect(host="localhost",
                                   user='Mashu',
                                   password='*******',
                                   port=tunnel.local_bind_port,
                                   db='mysql')

print(mydb)
cur = mydb.cursor()
cur.execute('USE mysql')
print(cur.execute('SELECT * FROM user'))

它似乎执行得很顺利,但是当我想创建光标时它说

mysql.connector.errors.OperationalError: MySQL Connection not available.

我进一步调查,发现与本地绑定相关的值,所以local_bind_addresslocal_bind_host等都设置为错误,说:

Server is not started. Please .start() first!

即使我的代码中有tunnel.start() 我确实检查了,我的服务器对于其他程序(例如 DataGrip)是可见的,我不知道问题出在哪里。

【问题讨论】:

【参考方案1】:

您正在使用带有with SSHTunnelForwarder 的上下文管理器,这意味着它将在退出范围时关闭连接。将cur = mydb.cursor 放在上下文管理器范围内将解决问题。

【讨论】:

以上是关于python sshtunnel没有启动服务器给定凭据的主要内容,如果未能解决你的问题,请参考以下文章

python sshtunnel 简单介绍

通过Python用pymysql,通过sshtunnel模块ssh连接远程数据库。

使用 python sshtunnel 的隧道

Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库

Python paramiko/sshtunnel 代码在 linux 下运行良好,但在 Windows 下失败

Python sshtunnel - 如何验证 SSH 连接?