SSH経由のTCP / IPでMySQL Workbenchを使用しようとしています-接続に失敗しました


41

MySQL WorkbenchでPCからSSH接続経由でTCP / IPを使用して接続できません。どうしたの?

Ubuntuサーバーmysql.myhost.comにMySQL 5.1データベースを作成しました。ローカルにアクセスできます。MySQL Workbench(PC)は、sshを介したTCP経由の接続を提供します。コマンドラインmysqlが正常に機能するリモートサーバーのポート3306で実行されます。

次のセッションの詳細を使用しました。

  • 接続方法:SSHを介したTCP / IP。
  • SSHホスト名:mysql.myhost.com:3306
  • SSHユーザー名:私のLinuxログイン
  • SSH公開鍵ファイル:私のローカル公開鍵ファイル
  • MySQLホスト名:127.0.0.1 MySQL
  • サーバーポート:3306
  • ユーザー名:root

接続しようとすると、エラーメッセージが表示されます:「ユーザールートでmysql.myhost.comのSSHトンネルを介して127.0.0.1:3306のMySQLに接続できませんでした」

「 '127.0.0.1'(10061)でMySQLサーバーに接続できません」

別のテストとして-Puttyを使用してポート3306でSSHトンネルを設定し、MySQL Workbenchを使用して、上記のようにローカル3306への接続をリモートサーバーに転送するトンネルを介してOKに接続できます。しかし、Workbenchで「TCP / IP over SSH」を使用できません。

2番目の質問:Workbenchが「SSH公開キーファイルへのパス」を要求する場合、秘密キーファイルは本当に必要ないのですか?


4
深い悲しみ。bugs.mysql.com/bug.php?id=61368は、OpenSSH形式で必要なプライベートキーファイルであることを示しています。私はそれについて疑問に思ったが、確信が持てなかった。
ディズリー

回答:


29

私自身がこのエラーに遭遇したとき、私はこの質問につまずいた。最終的に構成を把握できました。

  1. /etc/mysql/my.cnfには、bind_address = 127.0.0.1が既にあるものには何も触れませんでした。したがって、ローカルホストのみが接続できます。
  2. OpenSSHサーバーを使用しています。だから、その設定ファイル/ etc / ssh / sshd_configの私はから変わっていないはいしたがって、TCP転送を担当するのparam はいAllowTCPForwardingに
  3. 最後に、MySQL WorkBenchに以下を入力しました。

    • SSHホスト名:192.168.0.8 : 22(私のSSHサーバーはポート22をリッスンします)
    • SSHユーザー名:sshuser
    • SSHキーファイル:* C:\ Users \ windowsuser \ .ssh \ id_rsa *(パブリックキーとはいえ、プライベートキーである必要があります)
    • MySQLホスト名:127.0.0.1(これは変更しないでください。MySQLサーバーはデフォルトでローカルホストにバインドされているため、変更しませんでした)
    • MySQLサーバーポート:3306(デフォルト)
    • ユーザー名:root

残っているのは、パスワードではなくキーで動作するようにSSHサーバーを正しく構成することだけです。これが誰かを助けることを願っています。


サーバー側で行う必要のあることの1つは、/ etc / ssh / sshd_configに次の行があることを確認することでした。authorized_keysにはAuthorizedKeysFile /home/root/.ssh/authorized_keysエントリとしてPUBLICキーが含まれていた。
RyanNerd

設定するステップ2がリモートサーバー、つまり接続しようとしているMySQLインスタンスを持つホストにAllowTcpForwarding yes適用されるかどうかを明確にしてください。やMySQL Workbenchで、ローカルマシンにはインストール
ナムG VU

@NamGVUステップ2は、MySQLがインストールされているリモートサーバーに適用されます。特に、SSH経由でMySQLへのトンネリングを提供するOpenSSHサーバーに。
アイ

試しましたが、まだトンネルに失敗しました。MySQL Workbenchは、ログファイルのエラーの詳細を読むように指示します。どこで読むべきか知っていますか?
ナムG VU

1
設定した後、再起動を必要とする-私はそれが今日仕事だAllowTcpForwardingエントリ
ナム・G VU

8

TCP / IP over SSHアプローチは、MySQL接続の基礎となる「通常の」SSH接続を確立することで機能すると思います(-LOpenSSHコマンドラインクライアントを使用してトンネリングするのと同じ方法で)。

したがって、トンネルを確立するサーバー上のSSHサーバーへの接続を指定する必要があります。ここでは、を使用しているようですmysql.myhost.com:3306。これは、このSSHサーバー(MySQLではない)をポート3306で実行していることを意味します。

MySQLサーバーを127.0.0.1:3306にバインドし、SSHサーバーmysql.myhost.comをポート3306の外部IPアドレスにバインドすることは可能ですが、それはほとんどありません。SSHサーバーはポート22(デフォルト)でリッスンしていると思います。

おそらく使用する必要がありますmysql.myhost.com:22。(Puttyなどの通常のSSHクライアント経由で接続できることを確認してください。)


8

mysql.userテーブルのユーザーを確認する必要がある場合があります。

このクエリを実行します。

SELECT user,host FROM mysql.user;

次のようなものが表示されるはずです。

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

気づいてください

  • root @ localhostは、localhostからのみログインできます。
  • ping @ '%'はTCP / IP経由でログインできます
  • admin@10.67.135.%は、そのネットブロックからのみTCP / IP経由でログインできます
  • icorbin@10.67.135.%は、そのネットブロックからのみTCP / IP経由でログインできます

rootがTCP / IPを介して接続するようにする場合は、rootユーザーのIPアドレスまたはネットブロックを指定する必要があります。

このようなもの:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

またはroot @ localhostのルートパスワードが同じ場合

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

警告:root @ '%'は通常推奨されません。たぶん、root @ '10。% 'またはルート用の他のネットブロックを試してください。

試してみる !!!


3
...@localhostMySQLサーバーに関する限り、接続はトンネルの終わりから来るので、SSHトンネルを介して機能するべきではありませんか?
ブルーノ

@Bruno:確実に知る方法の1つは、正常に接続してからSELECT USER()、CURRENT_USER();を実行することです。そして、それが出力するものを見てください。関数USER()は、認証しようとしたものをエコーし​​ますが、CURRENT_USER()は、MySQLが認証に許可したものをエコーし​​ます。CURRENT_USER()がroot @ localhostをエコーする場合、質問に対する答えはyesです。
-RolandoMySQLDBA

3

MySQL Workbenchの古いバージョンを使用している可能性があり、更新する必要があります。これはバージョン6.0.8のバグで、現在はUbuntuリポジトリのバージョンです。バージョン6.3.6にアップデートすると、これが修正されました。

ここからダウンロード:http : //dev.mysql.com/downloads/workbench/#downloads



2

私の問題は、ed25519SSHキーを使用しようとしていたという事実によるものでした。SSHサーバーでこのエラーに気付きましたauth.log

sshd[25251]: Connection closed by 192.168.x.x [preauth]

RSAキーの使用に切り替えると、すべてが期待どおりに機能しました。


1

ssh経由でサーバーに接続しようとしていますが、mysqlポートを使用しています。必要なポートは、sshサーバーがリッスンしているものであれば何でもよく、通常は22、次にlocalhost、mysqlのホスト名とポートの3306です。


1

私は同じ問題に直面しました。AllowTcpForwarding Yesをチェックして設定しようとしましたが、sshd_configにありませんでした。sshホスト名がmysqlホスト名と同じではないことを確認してください(localhostを使用)。

ワークベンチで、+を選択して新しい接続を追加し、次を設定します。

  • 接続方法:標準のTCP / IP SSH経由
  • SSHホスト名:192.168.0.50 : 22(リモートSSHサーバーのIPとポートを配置します(オプション))
  • SSHユーザー名:sshuser
  • パスワードを設定するか、プロンプトで追加できます
  • MYSQLホスト名:localhostまたは127.0.0.1
  • MYSQLサーバーポート:3306
  • パスワードを設定するか、プロンプトで追加できます

接続をテストします。成功したら、OKを押してください。


1

PuTTYで作成されたキーが機能しない場合があります。Linuxボックスでssh-keygenを使用して、キーペアを作成します。新しいid_rsaの内容をWindows上のテキストファイルにコピーします。id_rsa.pubの内容をLinuxボックスのauthorized_keysに追加してください。MySQLホスト名の127.0.0.1を含む、Workbenchの他のデフォルトはすべて問題ありません。もちろん、SSH経由の標準TCP / IPでなければなりません。


1

私は同じエラーを思いつきました。問題は、タイムアウトが「ある程度」です。私は値を120秒まで上げましたが、助けにはなりませんでした。

私の場合、nslookup myserver.comを実行し、ホスト名の代わりにIPアドレスを使用して解決できました。私の想定は、IPv4からIPv6に接続しようとする問題です。


0

MySQLバージョン5.5.29およびMySQL Workbench 5.2.40を実行しているサーバーに接続しているUbuntuマシンで同じ問題が発生しました。SSHサーバーでは、ssh-keyを使用する必要があります。

rootユーザーを使用してMySQLサーバーに接続できませんでした。代わりに、ログインに使用する別の非rootユーザーを作成する必要がありました。その後、私はうまく接続することができました。

お役に立てれば。


0

わかりました、これは古い質問ですが、これで何時間も髪を引っ張りました。ブルーノとアイが言及したすべてをチェックしたが、すべてが良さそうだった。それから私はそれが本当にプライベート/パブリックキーの事だと気づきました。そこで、Pageantを起動し、秘密鍵を追加して、MySQL Workbenchが読み取って接続できる公開鍵を作成しました!(MySQL Workbenchが実際に動作し始めたとき、それは実際に一種の逆境でしたが、幸いな方法でした。)

TLDR:Pageantを使用して、秘密鍵から公開鍵を生成します。


秘密鍵を公開鍵として使用しないでください。これが秘密鍵である理由です。
ジェームズアンダーソン14年

@JamesAndersonは、それがバグのことではないのですか?テキストはプライベートを要求しているので、少なくともバグリンクによると、パブリックに読まれるはずです。か否か?
Thufir

-1

私が見つけたものだけ...多くの場合、シェルなしでSSHサーバーにユーザーを作成して(/ sbin / nologinなど)、サーバーにログインしてそこにファイルなどを作成できないようにします...(運用システムの場合「ファイアウォールでそれを行っています)。

その後の通常のLinux環境では、次のようなポートを引き続き転送できます。

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

その後、ローカルワークステーションから次のように接続します。

mysql -h localhost:3306 -u %mysql_user% -p

しかし、ワークベンチはMySQLに接続できないというエラーを表示します...そのユーザーのシェルを、たとえば/ bin / bashに変更すると、すべてが正常に動作します。

WorkbenchがリモートSSHサーバーにローカルシェルを必要とする理由はわかりません。


-1

mysqlワークベンチに正しい形式で新しいRSAキーを作成するだけです。

例えば:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.