SODA Engineering Blog
🔑

MySQL Workbenchでssh接続できないとき(Ed25519鍵編)

2022/11/26に公開

これはなに?

OpenSSHのポートフォワーディング機能を使って、ローカルホストから踏み台サーバを経由してDBサーバへ接続する方法を説明します。
MySQL Workbenchを題材にしていますが、OpenSSHを用いた汎用的な手法を用いているので、TCPで待ち受けるサーバに他のツールで接続する場合にも応用できます。

だれ向け?

主に、MySQL WorkbenchのSSH接続機能を使ってDBサーバへ接続ができない人向けです。
ですが、先述の通り、MySQL Workbenchに依った話ではないので、TCPを使って接続をするツールを使用する人であれば参考になると思います。

次のようなシステム構成で利用することを想定しています。

何が問題?

執筆時点では、MySQL WorkbenchはDBサーバに接続する際のSSH接続で、OpenSSHで作成したEd25519な秘密鍵(パスフレーズ付)を使用することに対応していないようです[1]

Access denied for 'none'. Authentication that can continue: publickey

したがって、Ed25519な鍵を使って踏み台サーバ経由でDBサーバへ接続する場合、パスフレーズなしの秘密鍵を用意するか、自前でSSHのトンネルを用意する必要があります。

どうすればよいの?

OpenSSHのローカルポートフォワーディング機能を使って、踏み台サーバを経由して、ローカルホストのポートへの通信をDBサーバのポートへと転送します。

やることとしては、次の通りです。

  1. ローカルホストのポートへの通信がDBサーバのポートに転送されるようなSSHトンネルを作成する
  2. MySQL Workbenchの接続設定で1で作成したローカルホストのポートに接続するようにする

1. ローカルのポートへの通信がDBサーバのポートに転送されるようなSSHトンネルを作成する

次のコマンドは、ローカルホストのTCP13306番ポートをDBサーバのTCP3306番ポートに転送するものです。db.example.comがDBサーバ、bastion.example.comが踏み台サーバのホスト名とし、DBサーバはTCP3306番でサービスを、踏み台サーバはTCP22番でSSHを待受ているものとします。

$  ssh -fNL 13306:db.example.com:3306 bastion.example.com

ローカルホストのポートは必ずしも13306番である必要はなく、使用中でない任意のポート番号を指定することができます。1023番以下のいわゆるWell Known Portを使用する場合はroot権限が必要です。

ここで使っているsshコマンドのオプションは次の通りです。

f バックグラウンドで実行
N リモート(踏み台サーバ)でコマンドを実行しない
L ローカルホストのポートを指定したホストのポートに転送する

他にもたくさんのオプションがあるので、興味がある方は$ man sshで調べてみてください。

2. MySQL Workbenchの接続設定で1で作成したローカルホストのポートに接続するようにする

MySQL Workbenchの接続設定で、Standard (TCP/IP)を選んでローカルホストのポートにMySQL Workbenchを接続します。

  • Connection Method: Standard (TCP/IP)
  • Hostname: 127.0.0.1またはlocalhost
  • Port: SSHトンネル時に指定したポート番号(ここでは13306)
  • Username/Password: DBサーバのアカウント

Test Connectionを押して Successfully made the MySQL connection のメッセージが表示されれば接続成功です。

検証環境

  • OS
    $ sw_vers
    ProductName:	macOS
    ProductVersion:	12.6.1
    BuildVersion:	21G217
    
  • OpenSSH
    $ ssh -V
    OpenSSH_8.6p1, LibreSSL 3.3.6
    
  • MySQL Workbench 8.0.28
脚注
  1. Bug #94620 can not connect via "Standard TCP/IP over SSH" using ed25519 key ↩︎

SODA Engineering Blog
SODA Engineering Blog

Discussion