You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:45:00