
私の新しい本番サーバーは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 サーバーのユーザー パスワード (パスワード認証モードが設定されている場合)。
PasswordAuthentication
SSH キー ファイル: 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 で接続した後 (!)、これらの値を使用するためです。