ウェブサイト

SSHトンネル経由でデータベースに接続する

Your site's MySQL server only listens on the server's own loopback address, so a desktop tool such as TablePlus, Sequel Ace, DBeaver or MySQL Workbench cannot dial it directly. An SSH tunnel gives…

サイトのMySQLサーバーはサーバーのloopbackアドレスのみでリッスンしているため、TablePlusやSequel Ace、DBeaver、MySQL Workbenchなどのデスクトップツールは直接接続できません。SSHトンネルはこれらのツールにlocal portを提供し、データベースに転送することで、MySQLをインターネットに公開することなく、データに適切なGUIでアクセスできるようにします。

トンネルが必要な理由

Websitesを開き、サイトをクリックして、Files、その後Databaseをクリックします。Connection detailsカードにはホストが127.0.0.1、ポートが3306と表示されています。これはプレースホルダーではなく、データベースは実際にそれが実行されているマシンからの接続のみを受け入れます。public internetからport 3306に到達できるものはなく、これによって攻撃の全クラスが排除されます。

SSHトンネルはこのギャップを安全に埋めます。SSHクライアントはノートパソコンのポートを開き、送信するすべてをencryptし、サーバー内部からデータベースに渡します。これはlocal processが接続したのと同じです。

KPanelでのデータベースタブの接続詳細表示

最初に必要なもの

トンネルはSSH接続なので、これが機能する前に、サイトに対して登録されたSSH keyが必要です。最初にAdding SSH Keys To a Siteに従って、その後ここに戻ってきてください。

4つのことを集めます:

  • SSH host、port、usernameFilesから、その後SSH Keysから、Connection detailsカードで確認します。
  • Database name、username、passwordFilesから、その後Databaseから確認します。eye iconをクリックしてパスワードを表示し、copy iconをクリックしてclipboardに入れます。

DatabaseタブにNo database provisioned for this site typeと表示される場合、このサイトにはデータベースがありません。Static sitesと一部のNode.js sitesはデータベースなしで作成されます。

ターミナルからトンネルを開く

一般的な形式は、local portをSSH接続の反対側の127.0.0.1:3306に転送するというものです。

ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
  • -L 3307:127.0.0.1:3306はマシンのport 3307を開き、サーバーのloopback interfaceのport 3306に転送します。
  • -Nはshellを実行せず、トンネルを開いたままにします。
  • このサイトのkeyがデフォルトのものではない場合は-i /path/to/keyを追加します。

そのターミナルウィンドウを実行したままにします。開いている間、ノートパソコン上の127.0.0.1:3307がサイトのデータベースです。

local では3306ではなく3307を使用してください。コンピュータに MySQLやMariaDBがインストールされている場合、すでに3306を使用しており、トンネルは「address already in use」エラーでバインドに失敗します。任意の無料local portが機能します。

データベースクライアントをトンネルに向ける

GUIクライアントで、以下の値を使用してplain MySQL connectionを作成します:

FieldValue
Host127.0.0.1
Port3307 (転送したlocal port)
UserDatabaseタブのUsername
PasswordDatabaseタブのPassword
DatabaseDatabaseタブのDatabase名

SSHホストをHostフィールドに入れないでください。クライアントの観点からすると、自分のマシン上のデータベースと通信しています。

組み込みSSHタブがあるクライアント

TablePlus、Sequel Ace、DBeaver、MySQL Workbenchはすべてトンネルを自分で管理でき、ターミナルを開いたままにする必要がありません。2つのフィールドグループに入力します:

  • SSH section: SSH Keysページのhost、port、username、private key file。
  • Database section: host 127.0.0.1、port 3306、およびDatabaseタブのdatabase名、user、password。

クライアントがトンネルを作成するとき、local forwarded portではなく、database sectionで3306を使用します。クライアントはサーバーの観点から接続しているため、実際のポートが見えます。

代わりにphpMyAdminを使用する

テーブルの簡単な確認が必要な場合は、トンネルが必要ありません。DatabaseタブにはphpMyAdminカードがあり、Open phpMyAdminボタンがあります。KPanelを通じてサインインするため、別のパスワードを覚える必要はなく、このサイトのデータベースに既にポイントされた新しいタブで開きます。

phpMyAdminはブラウジング、一度限りのクエリの実行、または値の確認に適した選択肢です。大規模なexports、schema work、またはscriptしたいものについては、トンネル上のdesktop clientが適しています。ブラウザルートについてはUsing phpMyAdminを参照してください。

トンネルを通じてクエリとdumpを実行する

トンネルが開いているとき、標準command line toolsはlocal forwarded portを向いて通常どおり機能します:

mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>

mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql

manual dumpはconvenience copyであり、backup strategyではありません。実行した時点でのみ新しく、それを実行したノートパソコンに存在します。Kapsuleは既にサイトの自動日次バックアップを取得し、30日間保持しています。local .sql fileに依存する前に、Taking a Backupを参照してください。

トラブルシューティング

トンネルを開くときに「Address already in use」が表示される。 マシン上の何かが既にそのlocal portにあります。別のものを選択します。例えば-L 3399:127.0.0.1:3306とし、クライアントのポートを一致させて変更します。

データベースクライアントから「Connection refused」が表示される。 トンネルが起動していません。SSHターミナルが実行中で、エラーが出力されていないことを確認し、クライアントのポートが-L引数のlocal portと一致していることを確認します。

SSHは接続しますが、クライアントはまだタイムアウトします。 127.0.0.1:3306に転送したこと、公開ホスト名には転送していないことを確認してください。公開名に転送すると、サーバーはインターネット上のデータベースに到達するよう要求され、これはまさに何がブロックされているかです。

「Access denied for user」。 SSHログインに成功しましたが、MySQLの認証情報が間違っています。Databaseタブからcopy iconsを使用してusernameとpasswordをもう一度コピーし、それらを再入力せず、正しいdatabase nameに接続していることを確認してください。

MySQLに到達する前に「Permission denied (publickey)」が表示される。 それはSSH layer であり、データベースではありません。Adding SSH Keys To a Siteのtroubleshooting sectionに従ってください。

次に行うこと

それでもお困りですか?

こちらまでメールでお問い合わせください support@kapsulehost.com またはKPanelでチャットを開いてください。

KPanel を開く
SSHトンネル経由でデータベースに接続する