Engine Yard Developer Center

SSH トンネル越しのデータベースへのリモート接続

このドキュメントは英語版のドキュメントを日本語に翻訳したものです。原文に修正があった場合は随時反映致しますが、翻訳作業が完了するまでは英語版が最新の可能性がございます。


更新日:2012 年 8 月 30 日

データベース インスタンスは、環境外部からは直接アクセスできません。データベースは SSH と異なり、セキュリティおよび修正プログラムのレベルを確実には維持できないため、これは望ましいことです。しかし、pgAdmin、MySQL Query Browser、または SQLyog などの外部データベース ツールからデータベースにアクセスするために、データベース ホスト/インスタンスへの SSH トンネルを作成する必要がある、ということでもあります。

たとえば、お使いのラップトップで pgAdmin または MySQL Query Browser を実行し、このツールを使用してアプリケーション データベースを調べる場合、ラップトップ (ローカル) からデータベース インスタンス (リモート) に至る SSH トンネルを Engine Yard Cloud で作成します。

また、オフサイト レプリケーションの設定にも SSH トンネルを使用することができます。

このページでは、以下について説明します。

SSH トンネルについて

SSH トンネルは、ローカル コンピューターのポートをリモート ホストのポートにリンクします。これらのポートがリンクされると、ローカル ポートへの通信はすべて SSH を通してリモート ポートに渡されます。同様に、リモート ポートへの通信はすべて、SSH を通してローカル ポートに返されます。この設定の更なる利点は、ローカル コンピューターとリモート ホスト間の通信が SSH 接続によって暗号化されることです。

前提条件

SSH トンネルを設定するには、まず、実行環境で SSH キーの設定とインストールを確認する必要があります。

手作業による SSH トンネルの作成

SSH トンネルを作成するための構文は次のようになります: ssh -L [local port]:[database host]:[remote port] \
[username]@[remote host]

  • [local port] データベース ツールが接続するローカル ポート。
    ローカル コンピューターに MySQL がインストールされている場合、既定ではポート 3306 で実行されるため、ローカル ポートに 3306 を使用しないでください。たとえば、代わりに 3307 を使用します。
    ローカル コンピューターに PostgreSQL がインストールされている場合、既定ではポート 5432 で実行されるため、ローカル ポートに 5432 を使用しないでください。たとえば、代わりに 5433 を使用します。

  • [database host] トンネリング先のデータベース インスタンスのホスト名または IP アドレス。[remote host] が、データベース インスタンスである場合は、(それ自体を参照するように) 127.0.0.1 に設定することをお勧めします。アプリケーション インスタンスを [remote host] として使用した場合は、代わりに database.yml から "host:" の値を使用することができます。

  • [remote port] リモート データベースが接続を待ち受けるポート。
    MySQL データベースでは、この既定値は 3306 です。
    PostgreSQL データベースでは、この既定値は 5432 です。

  • [username] データベース インスタンスのユーザー。Engine Yard Cloud データベースの既定ユーザーは deploy です。

  • [remote host] データベースへのトンネルの接続を介するリモート インスタンス。これは、データベース インスタンス自体、またはデータベース環境内の任意のインスタンスとすることができます。

トンネリング コマンドは、[remote host] が指定された状態で SSH セッションを開きます。トンネルは、SSH セッションがアクティブである限り動作します。セッション ウィンドウが貴重なワークスペースを使用している場合は、これを最小化することをお勧めします。トンネルをバックグラウンドで実行すると、複数のトンネルとポートの競合につながる場合があるからです。

MySQL データベース用に SSH トンネルを作成しテストする方法

  1. ローカル コンピューターのターミナル ウィンドウに、次のように入力します。

    ssh -L 3307:ec2-172-16-139-19.us-west-1.compute.amazonaws.com:3306 \
    deploy@ec2-174-129-17-196.compute-1.amazonaws.com

    ここで、
    3307 はローカル ポート、
    ec2-172-16-139-19.us-west-1.compute.amazonaws.com はデータベース ホスト、
    3306 は待ち受けポート、
    deploy はデータベース ユーザー名、
    ec2-174-129-17-196.compute-1.amazonaws.com はリモート ホストです。

  2. MySQL Query Browser や SQLyog などの外部データベース ツールを接続する前に、データベース コンソール mysql のような簡単なツールで接続をテストします。
    (このテストでは、トンネルが起動している必要があります。)

    次のように入力します。

    mysql -udeploy -p -P 3307 -h 127.0.0.1 

    ここで、
    deploy はリモート ホスト上のデータベース ユーザー名で、
    3307 はローカル ポートです。

    データベースのパスワード入力を求められます。

    メモ: -h 引数では、localhost ではなく 127.0.0.1 を使用することが必要です。

PostgreSQL データベース用に SSH トンネルを作成しテストする方法

  1. ローカル コンピューターのターミナル ウィンドウに、次のように入力します。

    ssh -L 5433:ec2-172-16-139-19.us-west-1.compute.amazonaws.com:5432 \
    deploy@ec2-174-129-17-196.compute-1.amazonaws.com

    ここで、
    5433 はローカル ポート、
    ec2-172-16-139-19.us-west-1.compute.amazonaws.com はデータベース ホスト、
    5432 は待ちうけポート、
    deploy はデータベース ユーザー名、
    ec2-174-129-17-196.compute-1.amazonaws.com はリモート ホストです。

  2. pgAdmin のような外部データベース ツールを接続する前に、データベース コンソール psql のような簡単なツールで接続をテストします。
    (このテストでは、トンネルが起動している必要があります。)

    次のように入力します。

    psql -Udeploy -d myapp -p 5433 -h 127.0.0.1

    ここで、
    deploy はリモート ホスト上のデータベース ユーザー名で、
    5433 はローカル ポートです。

    データベースのパスワード入力を求められます。

カスタム Chef レシピを使用した SSH トンネルの設定

上の手順では、SSH トンネルを手作業で設定する方法について説明しました。

SSH トンネルを設定する別の方法は、次のカスタム クックブックを使用することです: //github.com/engineyard/ey-cloud-recipes/tree/master/cookbooks/ssh_tunnel。

このレシピでは、以下をインストールします。

  • バックグラウンドでインスタンスから SSH トンネルを設定する init スクリプト
  • monit にトンネルを監視させ、開いた状態を保つ構成ファイル

Engine Yard ssh_tunnel カスタム Chef レシピを使用して SSH トンネルを作成する方法

詳細情報

以下についての詳細...                                         参照...
データベース ホスト名およびパスワードの検索 Find key information about your database (データベースの重要情報の検索)。                                    

このページについてのフィードバックやご質問は、以下に記入してください。サポートが必要な場合は、Engine Yard サポート にチケットを送信してください。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント

ログインしてコメントを残してください。

Powered by Zendesk