Ubuntu22.04 MySQLにSSHトンネルを使ってリモート接続する

## 概要
リモートのUbuntu22.04のMySQLに接続してローカル側からSQLを実行する必要がありました。ポート3306を開けるとセキュリティ的によくないので、SSHトンネルを使ってリモート接続できるようにします。MySQLは8.0.30、作業用PCはWinodws10 Pro、TeraTerm4.105、ODBC8.0.18です。事前にリモートのUbuntuにMySQLインストールと、SSH接続できていることが前提です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/46dd74d3-c26d-2b30-4fa1-43e9d6bae0f3.png)

## 手順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接続しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/2569678f-bd01-deca-a235-195f0381fc9d.png)
設定からSSH転送をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/c6f31110-5d77-8ea0-f0fb-6558dca25135.png)
追加を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/1ec3899a-ad55-d00a-b5d8-ac3c2c9779ba.png)
設定してOKを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/725f63cb-5eba-3fbb-891c-920efaa8b052.png)
OKを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/62ee098a-c956-c150-dafc-4a5aaade41a2.png)

## 手順3 接続確認
作業用PCにMySQLConnectorODBCをインストールしていたので、こちらで確認します。TeraTermでポート転送しているので、サーバIPは127.0.0.1、ポートは57575に設定します。手順1で設定したユーザ、パスワード、DB名も設定します、DataSourceNameは適当で問題ありません。mysqlクライアントを使う場合は、-Pオプションで57575を指定すれば動作します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/7cf6ae22-db82-27a2-86f0-2f90193c4da6.png)
大丈夫でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/81b71083-b6f9-3438-f58c-c95b156e7ab8.png)