expect の助けを借りて SSH トンネル経由で MySQL へのアクセスを転送する

expect の助けを借りて SSH トンネル経由で MySQL へのアクセスを転送する

MySQL サーバーにアクセスするための機能する SSH トンネルを作成する次のコマンドがあります。

ssh -f test@remotehost -L 127.0.0.1:3306:mysqlhost:3306 -N

ここで、remotehost は、.ssh/config の ProxyCommand を使用して設定したジャンプ ホスト経由でのみアクセスできます。

Host somehost
  Hostname jumphost-name
  ForwardAgent yes
  ControlPath ~/.ssh/cm-%r@%h:%p
  ControlMaster auto
  ControlPersist 10m

Host *.example.com 
  User test
  StrictHostKeyChecking no
  ProxyCommand ssh -X -4 test@somehost nc %h %p

expect ツールを使用して同じことを行うにはどうすればよいでしょうか?

答え1

expectは、ある種の TCP 接続からの入出力を処理するためのフレームワークです。確かに ssh をサポートできますが、mysql プロトコルを理解しているわけではありません。mysql プロトコル自体の通信のほとんどはバイナリ データです。最後に調べたところexpect、バイナリ データを適切に解析できませんでした。クライアントへのラッパーを記述した方がよいかもしれません。mysqlその場合、ssh 経由で接続した後に起動する必要がありますmysql

関連情報