MySQL に転送された TCP ポートを使わせる
MySQL クライアントが SSH TCP 転送経由で接続すべきときに、ローカルの Unix ソケットを選ばないようにします。
SSH 転送はローカルポート 13306 で待ち受けていますが、mysql は依然としてローカルのデータベースに接続します。あるいはローカルソケットが見つからないと報告します。Unix では、localhost を渡された MySQL クライアントは TCP ではなく Unix ソケットを選ぶことがあります。ポートを指定しても、その選択が必ず変わるわけではありません。
既存の承認済み TCP 転送では、プロトコルを明示してください:
mysql --protocol=TCP --host=127.0.0.1 --port=13306 \
--user=dbuser --password
ユーザー名は例示です。パスワードオプションは対話的な入力を求めます。このコマンドは Unix ソケットではなくローカルの TCP リスナーに接続します。
2 つのログインを分けておく
固定の SSH ルートは次の形をとれます:
ssh -N -L 127.0.0.1:13306:db.internal:3306 [email protected]
ゲートウェイの SSH サーバーは db.internal:3306 に到達します。その後 MySQL はそのバイトストリームを通じてデータベースアカウントを認証します。受け入れられた SSH 鍵はデータベースへのログインを許可せず、データベースの送信元制限は接続がルートのその側から来るものとして扱います。
これは固定の TCP アダプターであり、mysql が消費する SOCKS 設定ではありません。転送エンドポイントにはあらかじめ定義された 1 つのターゲットがあるため、アプリケーションに SOCKS のネゴシエーションは不要です。
使用される場所では、意図したデータベースの TLS アイデンティティと証明書ポリシーを維持してください。ソケットを loopback に接続しても、データベース証明書が別のサービス名に対して有効になるわけではありません。ローカル TCP 接続の成功が決めるのはトランスポートの選択であり、その後のデータベース認証や TLS チェックではありません。