SSHトンネルを介してMySQLに接続することにより、リモートシステム上のMySQLに安全にアクセスできます。このチュートリアルでは、WindowsではPuttyを、LinuxシステムではSSHを使用して、SSHトンネルを介してMySQLサーバーにリモート接続するために必要な手順を説明します。これは、リモートシステムのSSHポート22を介してMySQLのローカルポート(3306)をMySQLのリモートポート(3306)に転送する方法を示しています。これにより、ローカルポート3306をリモートサーバーのポート3306に接続することで、ポート22を介してリモートサーバーと安全に通信できるようになります。
前提条件
MySQLサーバーがインストールされているリモートサーバー。 Ubuntu20.04LTSにMySQL8をインストールする方法に従うことができます。
また、ポート22が開いていて、ポート3306がMySQLサーバーを備えたリモートシステムのファイアウォールによってブロックされていることを確認してください。このチュートリアルでは、MySQLサーバーがローカルシステムで実行されていないことも前提としています。これにより、ローカルシステムのポート3306がポート転送に使用できるようになります。
また、MySQLサーバーがインストールされ実行されているシステムへのSSHアクセスも必要です。 SSHユーザー名とパスワードのいずれかを使用できます またはSSHユーザー名とキー リモートシステムに接続します。
Windows10にPuttyをインストールする
WindowsシステムでPuttyを使用して、リモートサーバーにインストールされているMySQLサーバーにアクセスできます。 Linuxベースのシステムを使用している場合は、SSHセクションに移動できます。
図1で強調表示されているように、Puttyの公式ダウンロードページを開いてMSIインストーラーをダウンロードします。

図1
Putty実行可能ファイルをインストールせずに使用することもできます。ダウンロードページを下にスクロールして、実行可能ファイルをダウンロードします。
次に、Puttyを起動します。パテのデフォルトオプションは図2のようになります。

図2
Puttyを使用したMySQLへの安全な接続
このセクションでは、Puttyを使用してリモートシステムからSSHトンネルを介してMySQLに安全に接続する手順について説明します。次に、図3に示すように、リモートホストの詳細を入力します。

図3
また、接続をクリックします -> SSH ->トンネル 図3で強調表示されているように、図4に示すようにSSHポート転送の詳細を入力します。送信元ポートは 3306に設定する必要があります。 宛先は127.0.0.1:3306に設定する必要があります 。

図4
追加ボタンをクリックします 送信元ポートと宛先を入力した後。 転送ポートが更新されます 図4に示すように、また、Authオプションをクリックし、図5に示すようにSSHキーを選択します。Puttygenを使用して秘密キーを生成したことを確認してください。

図5
次に、開くボタンをクリックします 接続を開きます。図6に示すように、初めてセキュリティアラートが表示されます。

図6
[はい]ボタンをクリックします 接続を受け入れます。秘密鍵の生成中に設定した場合は、パスフレーズを要求されます。接続に成功すると、図7に示すようにリモートシステムの詳細が表示されます。

図7
SSH経由で接続するほかに、ローカルポート3306をリモートサーバーのポート3306に転送しました。 SSHトンネルをリモートサーバーに対して開いたままにするため、Puttyを閉じないでください。次に、任意のMySQLクライアントを起動し、リモートMySQLサーバーに接続してみます。私はデモンストレーションの目的でMySQLWorkbenchを使用しました。 Workbenchのホーム画面は図8のようになります。Workbenchを使用してSSHトンネル経由でリモートMySQLサーバーに接続することもできます。

図8
次に、プラスアイコンをクリックします 新しいローカル接続を作成するには 図8で強調表示されているように、図9に示すように接続を追加するオプションが表示されます。

図9
図9に示すように、接続名を指定し、ホスト名を127.0.0.1、ポートを3306のままにします。次に、[接続のテスト]をクリックして、SSHトンネルを介したリモートMySQLサーバーへの接続をテストします。 Vaultにパスワードを保存していない場合は、図10に示すようにパスワードを要求されます。

図10
次に、パスワードを入力して、[OK]ボタンをクリックします。 接続をテストします。図11に示すように、接続の成功に関する成功メッセージが表示されます。

図11
次に、[OK]ボタンをクリックします 接続メッセージを閉じて、もう一度[OK]ボタンをクリックします 接続ウィザードを閉じます。図12に示すように、接続ライブラリに接続が追加されます。

図12
次に、新しく追加した接続をクリックします。図13に示すように、リモートサーバーに接続し、リモートMySQLサーバーのデータベースを一覧表示する必要があります。

図13
これで、ローカルシステムでWorkbenchを使用してリモートMySQLサーバーで作業できます。また、リモートMySQLサーバーでの作業が完了したら、WorkbenchとPuttyを閉じて接続を終了します。
SSHを使用したMySQLへの安全な接続
以下に示すように、SSHコマンドを使用してローカルポート3306をリモートポート3306に転送することにより、リモートMySQLサーバーに接続できます。前のセクションと同様に、ローカルポート3306が空いていることを確認してください。
メモ :下記のコマンドはUbuntuデスクトップでテストされています。手順とコマンドは、他のLinuxシステムでも同様である必要があります。
# Shutdown local MySQL - Else use a different local port
sudo service mysql stop
# Install MySQL Client - If required
sudo apt install mysql-client
# Port Forwarding - Command
ssh -N -L 3306:127.0.0.1:3306 [USER]@[SERVER_IP]
# OR
ssh -N -L 3306:127.0.0.1:3306 -i [SSH Key] [USER]@[SERVER_IP]
# Port Forwarding - Example
ssh -N -L 3306:127.0.0.1:3306 [email protected]
# OR
ssh -N -L 3306:127.0.0.1:3306 -i example.pem [email protected]
上記のコマンドはSSHトンネルを開き、ローカルポート3306をリモートポート3306に接続します。これで、MySQLクライアントを使用してリモートMySQLサーバーに接続できます。前のセクションを参照して、ローカルシステムにインストールされているMySQLWorkbenchを使用できます。
また、図14と図15を参照して、SSHトンネルを開き、リモートMySQLサーバーに接続します。

図14

図15
概要
このチュートリアルでは、WindowsおよびLinuxシステムのSSHトンネルを介してリモートMySQLサーバーに接続するために必要な手順を説明しました。