MySQL Workbench 経由の SSH トンネル

MySQL Workbench 経由の SSH トンネル

私の新しい本番サーバーはSSHダブルトンネル経由でのみアクセスできます。ターゲットホストUbuntu 14.04 コンソールでコマンドを実行しssh targetHost、リモート マシンで mysql cli を実行するだけですが、GUI Workbench 経由で MySQL db にアクセスしたいと思います。これを実現するには、Workbench で接続をどのように構成すればよいでしょうか。

私の.ssh/config:

Host targetHost,  firewallHost
    User username
    IdentityFile /home/michalszulc/.ssh/id_rsa

Host targetHost
    proxycommand ssh -W %h:%p firewallHost

Host firewallHost
    hostname firewallHost.example.com
    port 2201
    passwordauthentication no
    controlmaster auto
    controlpath ~/

Host targetHost
    Hostname 123.123.123.123

答え1

プロセスは簡単です。新しい接続を作成し、接続方法としてSSH経由の標準TCP / IPを選択します。トンネルを提供するSSHサーバーの値:

  • SSH ホスト名: SSH トンネルを作成するサーバーのアドレス (SSH サーバーと MySQL は同じホストまたは同じネットワーク アドレスにすることができますが、これは構成によって異なります)。
  • SSH ユーザー名: SSH サーバーのユーザー名。
  • SSH パスワード: SSH サーバーのユーザー パスワード (パスワード認証モードが設定されている場合)。
  • PasswordAuthenticationSSH キー ファイル: SSH サーバーでポリシーを有効にして値がの場合、サーバー上の認証用の秘密キーを含むファイルno

DBMS MySQLへの接続の値。

  • MySQL ホスト名: SSH サーバーを基準として、MySQL がサービスを実行しているホストのアドレス。SSH と MySQL サービスが同じホストで実行されている場合、トンネル経由の接続が確立されると、MySQL サービスは localhost からの要求をリッスンするため、東方向の値は localhost または 127.0.0.1 になります (MySQL ディレクティブで設定された値によって異なりますbind_adress)。
  • MySQL サーバー ポート: MySQL 接続ポート、通常は 3306 です。
  • MySQL ユーザー名: MySQL に接続するためのユーザー名。つまり、MySQL の有効なユーザーであり、トンネルからの接続が承認されている必要があります。
  • デフォルト スキーマ: SQL USE と同等です。

答え2

セットアップが正しいかどうかは明らかではありません。したがって、firewallhostホストはワークベンチからアクセス可能だと想定しています。したがって、このファイアウォールの背後にある「実際の」mysql サーバーにアクセスできるオープン ポートをこのサーバー上に作成する必要があります。

に永続的なSSHトンネルを設定すれば、それはまったく問題ありませんfirewallhost。これは次のように行われます。firewallhost

ssh -L localhost:33060:localhost:3306 someshelluser@databasehost

これにより、ポート 33060 (またはここで空いているポート) 上の localhost (どの NIC でも公開されていない) 用の Openssh トンネルが作成され、 ではsomeshelluser として接続されているためfirewallhost、このトンネルを介して 3306 ポート (これも localhost 上ですが、マシン上databasehost) に接続されますdatabasehost

これで、ワークベンチに接続できるようになりました。

  • SSHホスト名:firewallhost
  • SSHユーザー名: 有効なユーザーfirewallhost
  • SSHパスワード: 有効なユーザーのパスワード
  • SSH キーファイル: キーファイルの代替

  • MySQL ホスト名: (のローカルホストlocalhostにトンネルを開いたため)firewallhost

  • MySQL サーバー ポート: 33060
  • MySQLユーザー名: MySQLユーザー

ssh トンネルをfirewallhost永続的にするには、次のように、キーファイル ( にアクセスするためのものdatabasehost) と screen を介した分離されたプロセスを使用して、そこから開始できます。これは、 で使用する rc.local などに配置できますfirewallhost

screen -d -m /usr/bin/ssh -v -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "BatchMode=yes" -i /your/.ssh/ssh_host_dsa_key -q -L locahost:33060:localhost:3306 someshelluser@databasehost

このような SSH トンネルは、SSH トンネルを作成したマシン (ここfirewallhost) で「新しい」ポートを開くことによって、任意のポート ストリームを 1 台のマシンから別のマシンに「転送」できると「想像」する必要があります。これは のパブリック NIC でも実行できますfirewallhostが、mysql ポートをパブリックに公開したくないので、ローカルホストで行う必要があります ;)

アップデート:

わかりました。永続的なトンネルを作成するための直接アクセスがないのでfirewallhost、別の方法を試してください。proxycommand を使用して接続できるとのことです。これを '-o' オプションではなくインラインで記述したので、ssh_config にこれが含まれていると想定しています。

ssh_config が次のようになっている場合:

Host server
    Hostname mysqlserver.example.org
    ProxyCommand ssh -W %h:%p firewallhost.example.org

次に、次のように試してください。SSHホスト名' をワークベンチで実行します。場合によっては、これを使用して ssh パラメータを指定することもできます。テストはしていませんが、アプリケーションがホスト名フィールドの内容を ssh 呼び出しに直接渡すことは珍しいことではありません。

SSHホスト名:

-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org

これにより、ファイアウォールホストを介して mysqlserver に接続できるようになります。ここから、ワークベンチが期待しているように、mysqlserver に直接接続するのと同じように、mysql 設定を使用できます。

更新2:

あなたが書いたように、あなたは背後で MySQL データベースに接続できる同じマシン (Ubuntu 14) 上にいるのでfirewallhost、コンソールで使用するワークベンチの値を使用するだけです。.ssh/config の対象である同じユーザーでワークベンチを呼び出すと、ワークベンチは .ssh/config を使用します。

ついに:

SSH ホスト名は単に「targetHost」になります。.ssh/config からの proxycommand は「firewallHost」を介して「targetHost」にトンネルします。SSH ユーザー名は「username」です (これも .ssh/config から)。

MySQL ホスト名は localhost、ポートは 3306 である必要があります。これは、質問に書いたように、ssh で 'targetHost' にアクセスするときとまったく同じです。ワークベンチは、ssh で接続した後 (!)、これらの値を使用するためです。

関連情報