概要
リモートのUbuntu22.04のMySQLに接続してローカル側からSQLを実行する必要がありました。ポート3306を開けるとセキュリティ的によくないので、SSHトンネルを使ってリモート接続できるようにします。MySQLは8.0.30、作業用PCはWinodws10 Pro、TeraTerm4.105、ODBC8.0.18です。事前にリモートのUbuntuにMySQLインストールと、SSH接続できていることが前提です。
手順1 MySQLのユーザを追加してテスト用DBを作成
SSHトンネルを使うため、外部ホストからの接続の扱いにはならないので、接続元はlocalhostでユーザを作成します。ユーザ名はwindowsにします。テスト用のDBも作成しておきます。
$ sudo mysql -u root
[sudo] password for lustm5: (Ubuntuのsudoパスワードを入力)
mysql> CREATE USER 'windows'@'localhost' IDENTIFIED BY 'password';
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| windows | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
テスト用DBのtestを作成します。
mysql> create database test;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
ユーザwindowsにテスト用DBのtestの全テーブルに対してselect・insert・update・delete権限を与えます。
mysql> grant select,insert,update,delete on test.* to 'windows'@'localhost';
mysql> show grants for 'windows'@'localhost';
+---------------------------------------------------------------------------+
| Grants for windows@localhost |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `windows`@`localhost` |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO `windows`@`localhost` |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)
手順2 TeraTermでポート転送設定
リモートのUbuntuにSSH接続しておきます。
設定からSSH転送をクリックします。
追加を押します。
設定してOKを押します。
OKを押します。
手順3 接続確認
作業用PCにMySQLConnectorODBCをインストールしていたので、こちらで確認します。TeraTermでポート転送しているので、サーバIPは127.0.0.1、ポートは57575に設定します。手順1で設定したユーザ、パスワード、DB名も設定します、DataSourceNameは適当で問題ありません。mysqlクライアントを使う場合は、-Pオプションで57575を指定すれば動作します。
大丈夫でした。