私の新しい本番サーバーは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_adress
MySQL)。 - 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
。になります。databasehost
にdatabasehost
。
これでワークベンチを接続できます。
- SSHホスト名:
firewallhost
- SSHユーザー名:有効なユーザー
firewallhost
- SSHパスワード:有効なユーザーの1人のパス。
SSHキーファイル:代替キーファイル
MySQLホスト名:(
localhost
localhostでトンネルを開くとき)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
firewallhost
SSHトンネルを作成したコンピュータで「新しい」ポートを開き、これらのSSHトンネルがあるコンピュータから別のコンピュータ(ここ)にすべてのポートフローを「転送」できると「想像する」必要があります。これはパブリックネットワークカードでも可能ですが、firewallhost
mysqlポートを公開して公開したくないので、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を介して接続した後(!)この値を使用するためです。