You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

连接PythonAnywhere托管MySQL数据库时出现Secsh通道0打开失败(Administratively prohibited)错误的求助

解决PythonAnywhere MySQL SSH隧道连接错误:Administratively prohibited

嘿,我来帮你搞定这个问题!你遇到的Administratively prohibited错误是PythonAnywhere的SSH验证限制导致的,具体原因和修复方案如下:

错误原因分析

2021-10-19 13:02:38,943| ERROR | Secsh channel 0 open FAILED: open failed: Administratively prohibited
2021-10-19 13:02:38,943| ERROR | 无法建立从本地('127.0.0.1', 62213)到隧道远程端('lewisMachilika.mysql.pythonanywhere-services.com', 3306)的连接:打开新SSH通道错误:ChannelException(1, 'Administratively prohibited')

这个报错的核心原因是:

  • PythonAnywhere禁止使用密码登录SSH隧道:为了安全,PythonAnywhere早已取消了密码验证SSH隧道的方式,必须使用SSH密钥对进行身份验证,这是最常见的触发该错误的原因。
  • 次要可能:如果你的remote_bind_address配置有误,也可能触发类似权限错误,但优先排查密钥问题。

修复步骤

1. 在本地生成SSH密钥对

打开本地终端(Windows用PowerShell或Git Bash,Mac/Linux用终端),执行以下命令生成RSA密钥对(一路回车接受默认配置即可):

ssh-keygen -t rsa

生成后,密钥文件会保存在:

  • 私钥:~/.ssh/id_rsa(Windows路径通常是C:\Users\你的用户名\.ssh\id_rsa),务必保密,不要分享给任何人
  • 公钥:~/.ssh/id_rsa.pub(需要上传到PythonAnywhere)

2. 将公钥上传到PythonAnywhere

登录PythonAnywhere后台,按以下步骤操作:

  • 点击右上角的账号名,进入Account页面
  • 找到SSH keys选项,点击Add a new SSH key
  • 打开本地的id_rsa.pub文件,复制全部内容粘贴到输入框,保存即可

3. 修改Python代码,使用SSH密钥验证

把你原来的代码替换为以下版本,修改对应的用户名、密码和路径:

import MySQLdb
import sshtunnel

sshtunnel.SSH_TIMEOUT = 5.0
sshtunnel.TUNNEL_TIMEOUT = 5.0

with sshtunnel.SSHTunnelForwarder(
    ('ssh.pythonanywhere.com'),
    ssh_username='你的PythonAnywhere用户名',
    ssh_pkey='~/.ssh/id_rsa',  # Windows用户替换为实际私钥路径,比如'C:/Users/xxx/.ssh/id_rsa'
    remote_bind_address=('你的用户名.mysql.pythonanywhere-services.com', 3306)
) as tunnel:
    connection = MySQLdb.connect(
        user='你的MySQL用户名(通常和PythonAnywhere用户名一致)',
        passwd='你的MySQL密码',
        host='127.0.0.1',
        port=tunnel.local_bind_port,
        db='你的数据库名称(格式为:用户名$数据库名)',
    )
    # 示例:执行一个简单查询验证连接
    cursor = connection.cursor()
    cursor.execute("SELECT 1;")
    print("连接成功!测试结果:", cursor.fetchone())
    # 清理资源
    cursor.close()
    connection.close()

4. 验证SSH连接(可选但推荐)

在本地终端执行以下命令,测试能否用密钥登录PythonAnywhere的SSH服务器:

ssh 你的用户名@ssh.pythonanywhere.com

如果能成功登录到PythonAnywhere的命令行界面,说明密钥配置完全正确,此时运行Python代码就应该能正常连接MySQL了。

额外注意事项

  • 确认remote_bind_address的正确性:你可以在PythonAnywhere的Databases页面找到准确的MySQL主机地址,格式一定是你的用户名.mysql.pythonanywhere-services.com
  • 不要将私钥文件上传到代码仓库或任何公共平台,避免账号泄露风险

内容的提问来源于stack exchange,提问作者lewis machilika

火山引擎 最新活动