SSH サポート

このページでは、gcloud CLI を使用して、SSH(または他の TCP プロトコル)を使用してローカルマシンからワークステーションに接続する方法について説明します。

Cloud Workstations は、トンネルを使用して、ワークステーションをインターネットに公開することなく、ローカルマシンのポートとワークステーションのポートの間で TCP トラフィックを転送します。接続は、gcloud CLI の認証情報を使用して認証され、ターゲット ワークステーションの IAM ポリシーに沿って承認されます。

ローカルポートとワークステーション間で TCP トンネルが確立されたら、トンネルを使用して SSH クライアント、curl、または TCP を使用する他のアプリケーションからトラフィックを転送できます。

利便性を高めるため、Cloud Workstations には gcloud workstations ssh コマンドが用意されています。このコマンドを使用すると、TCP トンネルを確立し、単一の gcloud CLI コマンドで SSH クライアントを実行できます。

その他のユースケースでは、gcloud workstations start-tcp-tunnelコマンドを使用して、TCP トンネルを確立し、別のターミナルでトンネルを使用するアプリケーションを実行します(たとえば、curl

準備

  1. 接続するワークステーションがまだ存在しない場合は、 ワークステーションを設定します

  2. Google Cloud CLI をインストールします。 インストール後、 初期化するには、次のコマンドを実行して Google Cloud CLI を初期化します。

    gcloud init

    外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります

  3. 接続するワークステーションに Cloud Workstations ユーザー IAM ロールがあることを確認します。

    [IAM] に移動

SSH を使用してワークステーションに接続する

ワークステーションへの安全な SSH 接続を確立するには、TCP トンネルを開始して SSH クライアントを実行する gcloud workstations ssh コマンドを使用します。

ローカルのターミナル ウィンドウで次のコマンドを実行します。

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME  \
    --port=WORKSTATION_PORT  \
    --local-host-port=localhost:LOCAL_PORT  \
    WORKSTATION_NAME

次の値を置き換えます。

  • PROJECT_ID: ワークステーションを含む プロジェクトの Google Cloud プロジェクト ID。省略すると、現在のプロジェクトが使用されます。

  • REGION: ワークステーションのクラスタがあるリージョン(us-central1 など)。

  • CLUSTER_NAME: ワークステーションを含むワークステーション クラスタの名前。

  • CONFIG_NAME: このワークステーションを含むワークステーション構成の名前。

  • WORKSTATION_PORT (省略可): トラフィックの送信先のワークステーションのポート。省略すると、トラフィックはポート 22 に送信されます。事前構成された Cloud Workstations イメージにはすべて、ワークステーション ポート 22 で実行される SSH サーバーが含まれています。

  • LOCAL_PORT(省略可): トラフィックの送信元となるローカルホスト ポート。有効なポート番号は 102465535 です。--local-host-port フラグを省略するか、ポート 0 を指定すると、未使用のポートが自動的に選択されます。

  • WORKSTATION_NAME: ワークステーションの名前。

SSH 構成と .ssh/config ファイル

gcloud workstations ssh を使用すると、コマンドは localhost を介して接続をルーティングします。そのため、ワークステーションの名前を使用する ~/.ssh/config ファイルの Host エントリは自動的に適用されません。

カスタム SSH 構成を適用するには、次のいずれかのオプションを選択します。

オプション 1: コマンドラインでフラグを渡す

SSH オプションを二重ダッシュ(--)の後に付加することで、基盤となる SSH クライアントに直接渡すことができます。

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME \
    WORKSTATION_NAME \
    -- -o SSH_OPTION=VALUE

オプション 2: 永続的な TCP トンネルと .ssh/config を使用する

~/.ssh/config ファイルを使用する場合は、次の操作を行います。

  1. 別のターミナル ウィンドウで永続的な TCP トンネルを開始し、ローカルポートを指定します。

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        22
    
  2. ローカルマシンの ~/.ssh/config ファイルに構成ブロックを追加します。

    Host WORKSTATION_NAME
        HostName localhost
        Port LOCAL_PORT
        User user
        # Disable host key checking for ephemeral cloud workstations
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null
        # Add any other SSH options here
    
  3. 標準の SSH を使用してワークステーションに接続します。

    ssh WORKSTATION_NAME
    

TCP トンネルを使用して任意の TCP トラフィックをワークステーションに転送する

ssh 以外の TCP アプリケーションを使用してワークステーションに接続するには、 gcloud workstations start-tcp-tunnel コマンドを使用します。

  1. 次の gcloud CLI コマンドを実行して、認証済みの TCP トンネルを作成します。

    コマンドをコピー貼り付けバッファにコピーするには、コードサンプルをコピーをクリックし、ローカルのターミナル ウィンドウにコマンドを貼り付けます。

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        WORKSTATION_PORT
    

    次の値を置き換えます。

    • PROJECT_ID: ワークステーションを含む プロジェクトの Google Cloud プロジェクト ID。省略すると、現在のプロジェクトが使用されます。

    • REGION: ワークステーションのクラスタがあるリージョン(us-central1 など)。

    • CLUSTER_NAME: ワークステーションを含むワークステーション クラスタの名前。

    • CONFIG_NAME: このワークステーションを含むワークステーション構成の名前。

    • LOCAL_PORT(省略可): トラフィックの送信元となるローカルホスト ポート。有効なポート番号は 102465535 です。--local-host-port フラグを省略するか、ポート 0 を指定すると、未使用のポートが自動的に選択されます。

    • WORKSTATION_NAME: ワークステーションの名前。

    • WORKSTATION_PORT: トラフィックの送信先のワークステーションのポート。事前構成された Cloud Workstations イメージ には、ワークステーション ポート 22 で実行される SSH サーバーが含まれています。

  2. gcloud CLI コマンドは、ワークステーションとの接続テストを実行し、トンネルを開き、ポート番号を表示します。

    Listening on port [LOCAL_PORT].
    

    localhost:LOCAL_PORT に送信されたすべてのトラフィックは、 ワークステーションに転送されます。このポートには、ローカル コンピュータで実行しているアプリケーションだけがアクセスできます。

  3. gcloud CLI を実行したまま、別のターミナルを開いて、ワークステーションに接続するアプリケーションを実行します。

    例えば、ポート WORKSTATION_PORT を提供するサーバーをワークステーションで実行しており、前のステップで、ローカルのポート LOCAL_PORT とワークステーションのポート WORKSTATION_PORT の間でトラフィックを転送する TCP トンネルを作成した場合、ローカルマシンで curl を実行して、ワークステーションのサーバーに接続することができます。

    curl localhost:LOCAL_PORT
    Hello, world!
    
  4. 完了したら、TCP トンネルを開始したターミナルに戻り、gcloud CLI を中断するには Control+C を押します。

異なるポートで SSH サーバーを使用する

カスタム コンテナ イメージ では、任意のポートで SSH サーバーを使用することもできます。gcloud CLI トンネルからの接続をサポートするには、カスタム SSH サーバーを構成してパスワード認証を許可し、ターゲット ユーザーに空のパスワードを設定する必要があります。Cloud Workstations は Cloud IAM を使用して、承認されたトラフィックのみが SSH サーバーに送信されるようにします。

SSH セッションを永続的に維持する

ネットワーク接続が切断されると、SSH セッションが切断されます。切断中にプロセスを実行したままにして、後でセッションに再接続するには、tmux などのツールを使用します。

ワークステーションに tmux をインストールするには:

  1. 現在のセッションに tmux を手動でインストールして、すぐに使用できるようにします。

    sudo apt update
    sudo apt install -y tmux
    
  2. 起動時に tmux をインストールするようにワークステーションを構成します。次のコマンドを含めるように /home/user/.workstation/customize_environment ファイルを作成または追加します。

    #!/bin/bash
    sudo apt update
    sudo apt install -y tmux
    

    詳細については、既存のワークステーション イメージを拡張せずにカスタマイズするをご覧ください。

  3. ワークステーションの起動時に実行されるように、ファイルを実行可能にします。

    chmod +x /home/user/.workstation/customize_environment
    

tmux がインストールされたら:

  1. ワークステーションに接続します。

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME
    
  2. ワークステーションから新しい tmux セッションを開始します。

    tmux
    
  3. 接続が切断された場合は、再接続して、ローカル ターミナルから次のコマンドを実行してセッションに接続します。

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME \
        -- -t tmux attach
    

次のステップ