MySQL WorkbenchによるSSHトンネリング

MySQL WorkbenchによるSSHトンネリング

私の新しい本番サーバーはSSHデュアルトンネルを介してのみ表示されます。私は達することができるターゲットホストリモートシステムでmysql cliの代わりにUbuntu 14.04コンソールを介してコマンドを実行しますssh targetHostが、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ユーザー名:SSHサーバーのユーザー名。
  • SSHパスワード:SSHサーバーのユーザーパスワード(モードパスワード認証が設定されている場合)。
  • SSH鍵ファイル:サーバーが認証するために使用する秘密鍵を含むファイル(PasswordAuthenticationその値はSSHサーバーでポリシーが有効になっている場合no)です。

DBMS MySQLに接続するための値です。

  • MySQLホスト名:SSHサーバーに基づいてMySQLサービスが実行されているホストのアドレス。 SSHサービスとMySQLサービスが同じホストで実行されている場合、eastbound値はlocalhostまたは127.0.0.1です。トンネルを介した接続が確立されると、MySQLサービスはディレクティブで設定された値に従ってlocalhostからの要求を受信するためです。bind_adressMySQL)。
  • MySQLサーバーポート:MySQLに接続するポートで、通常3306です。
  • MySQLユーザー名:MySQLに接続するためのユーザー名。つまり、有効な MySQL ユーザーでなければならず、トンネルから接続する権限が必要です。
  • 基本スキーマ:SQL USEと同じです。

答え2

設定が正しいかどうかわからない。したがって、firewallhostあなたのワークステーションからホストにアクセスできると仮定します。したがって、ファイアウォールの背後にある「実際の」mysqlサーバーにアクセスできるように、このサーバーにオープンポートを作成する必要があります。

にある場合のfirewallhost実行方法は次のとおりです。firewallhost

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

これにより、ポート33060(またはここにある利用可能なポート)からlocalhost(どのネットワークカードでも公開されていません)へのopensshトンネルが作成されますfirewallhost。になります。databasehostdatabasehost

これでワークベンチを接続できます。

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

  • MySQLホスト名:(localhostlocalhostでトンネルを開くとき)firewallhost

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

SSHトンネルを永続化するには、firewallhost以下のように画面を介してキーファイル(アクセス用)とは別のプロセスから始めることができます。databasehostこれは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

firewallhostSSHトンネルを作成したコンピュータで「新しい」ポートを開き、これらのSSHトンネルがあるコンピュータから別のコンピュータ(ここ)にすべてのポートフローを「転送」できると「想像する」必要があります。これはパブリックネットワークカードでも可能ですが、firewallhostmysqlポートを公開して公開したくないので、localhostにいることをお勧めします。)

修正する:

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

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

アップデート2:

作成したのと同じマシン(Ubuntu 14)にあり、背後にあるmysqlデータベースに接続できるため、firewallhostコンソールで使用するワークベンチの値のみを使用してください。 .ssh/config と同じユーザーでワークベンチを呼び出すと、ワークベンチは .ssh/config を使用します。

ついに:

SSHホスト名は単に「targetHost」です。ここで、.ssh/configのプロキシコマンドは、「firewallHost」を介して「targetHost」にパスを指定します。 SSHユーザー名は「username」です(やはり.ssh / configから)。

MySQLホスト名はlocalhostとポート3306でなければなりません。これは、sshを介して "targetHost"にアクセスするときに質問に書いたものと正確に一致する必要があります。ワークベンチはsshを介して接続した後(!)この値を使用するためです。

関連情報