2016-09-18 29 views
2

Pythonスクリプトを使用して、Webサーバー上の既存のMySQLデータベース(db名DB2639162)にデスクトップPCからテーブルを追加する手助けが必要です。私は次のスクリプト(create_db.py)を書いています:Pythonを使用してSSH経由でMySQLに接続

import MySQLdb 
from sshtunnel import SSHTunnelForwarder 
ssh_pwd='' 
ssh_usr='' 
mysql_pwd='' 
mysql_usr='' 
with SSHTunnelForwarder(('ssh.strato.de', 22), 
         ssh_password=ssh_pwd, ssh_username=ssh_usr, 
         remote_bind_address=('rdbms', 3306)) as server: 
    print 'Server connected via SSH!' 

    db1 = MySQLdb.connect(host='127.0.0.1', 
         port=server.local_bind_port, 
         user=mysql_usr, 
         passwd=mysql_pwd, 
         db='DB2639162') 
    cursor = db1.cursor() 
    sql = 'CREATE TABLE mydata' 
    cursor.execute(sql) 
    db1.close() 

残念ながらスクリプトはうまくいかず、以下の出力が表示されます。明らかに、SSH接続は正常に確立できますが、データベースへのアクセスは失敗します。ターミナルコマンドがうまく機能してくれMySQLデータベースへのアクセスを許可するよう

Server connected via SSH! 
2016-09-18 11:02:19,291| ERROR | Secsh channel 0 open FAILED: open failed: Administratively prohibited 
2016-09-18 11:02:19,295| ERROR | Could not establish connection from ('127.0.0.1', 44017) to remote side of the tunnel 
Traceback (most recent call last): 
    File "create_db.py", line 18, in <module> 
    db='DB2639162') 
    File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect 
    File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 193, in __init__ 
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0") 

はまた、ユーザー名、パスワードは大丈夫です。

ssh [email protected] 
mysql -h rdbms -u mysql_usr -p DB2639162 

は答えがエラーメッセージに権利がある

+0

これを解決できましたか? –

答えて

1

事前にありがとう:

2016年9月18日11:02:19291 |エラー| Secshチャネル0オープンFAILED:オープン失敗:管理上の禁止

サーバー上のシェルセッションでMySQLコマンドラインクライアントを実行し、ポート転送/トンネリングを設定することはまったく異なるものです。あなたが1つを行うことができるという事実は、あなたが他をやることを意味するものではありません。

このサーバーは、ポート転送/トンネリング(「管理上禁止されています」)を明示的に禁じています。別のアプローチが必要です。

+0

あなたは別のアプローチを使用すると言いましたが、これについて何かお勧めしますか? –

関連する問題