Mac系统下无法用Python结合sshtunnel访问MySQL数据库?
解决方案
问题分析
你遇到的两个核心问题:
- Mac系统下sshtunnel会自动尝试加载本地SSH密钥文件(
/Users/polzimac/.ssh/id_ed25519),即使设置了allow_agent=False,仍会触发密钥密码提示 - 本地3306端口可能被Mac自带的MySQL服务或其他程序占用,导致隧道无法绑定
修改步骤
1. 强制禁用SSH密钥文件加载
在SSHTunnelForwarder中添加ssh_pkey=None参数,明确告诉程序只使用密码登录,不尝试加载本地密钥。
2. 更换未被占用的本地端口
将本地绑定端口从3306改为其他未被占用的端口(比如3307),同时同步修改MySQL连接的端口参数。
修改后的完整代码
import mysql.connector import sshtunnel if __name__ == '__main__': with sshtunnel.SSHTunnelForwarder( ("xyz.a2hosting.com", 7822), ssh_username="myName", ssh_password="myPW", ssh_pkey=None, # 新增:禁用本地密钥文件加载 remote_bind_address=("0.0.0.0", 3306), local_bind_address=("127.0.0.1", 3307), # 修改端口为3307 allow_agent=False ) as tunnel: mydb = mysql.connector.connect( user="myUser", password="myPW", host="127.0.0.1", database="myDB", port=3307 # 同步修改端口为3307 ) c = mydb.cursor() print(f"Access is working fine!") # 移到with块内,确保连接成功后再打印
额外验证步骤
- 检查本地端口是否被占用:在终端执行
lsof -i :3306,如果有输出说明端口被占用,确认后停止对应服务或继续使用其他端口 - 确保SSH密码和MySQL账号密码正确,避免因凭证错误导致的隐藏问题
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

