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 をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。ログイン後、次のコマンドを実行して Google Cloud CLI を初期化します。

    gcloud init

  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(省略可): トラフィックの送信元となるローカルホスト ポート。有効なポート番号は 1024~65535 です。--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(省略可): トラフィックの送信元となるローカルホスト ポート。有効なポート番号は 1024~65535 です。--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 トンネルを起動したターミナルに戻り、Ctrl+C キーを押して gcloud CLI を中断します。

別のポートで 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
    

次のステップ