このページでは、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 )
準備
接続するワークステーションがまだ存在しない場合は、 ワークステーションを設定します。
Google Cloud CLI をインストールします。 インストール後、 初期化するには、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して
gcloudCLI にログインする必要があります。接続するワークステーションに Cloud Workstations ユーザー 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 ファイルを使用する場合は、次の操作を行います。
別のターミナル ウィンドウで永続的な 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ローカルマシンの
~/.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標準の SSH を使用してワークステーションに接続します。
ssh WORKSTATION_NAME
TCP トンネルを使用して任意の TCP トラフィックをワークステーションに転送する
ssh 以外の TCP アプリケーションを使用してワークステーションに接続するには、
gcloud workstations start-tcp-tunnel
コマンドを使用します。
次の
gcloudCLI コマンドを実行して、認証済みの 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 サーバーが含まれています。
gcloudCLI コマンドは、ワークステーションとの接続テストを実行し、トンネルを開き、ポート番号を表示します。Listening on port [LOCAL_PORT].localhost:LOCAL_PORTに送信されたすべてのトラフィックは、 ワークステーションに転送されます。このポートには、ローカル コンピュータで実行しているアプリケーションだけがアクセスできます。gcloudCLI を実行したまま、別のターミナルを開いて、ワークステーションに接続するアプリケーションを実行します。例えば、ポート WORKSTATION_PORT を提供するサーバーをワークステーションで実行しており、前のステップで、ローカルのポート LOCAL_PORT とワークステーションのポート WORKSTATION_PORT の間でトラフィックを転送する TCP トンネルを作成した場合、ローカルマシンで
curlを実行して、ワークステーションのサーバーに接続することができます。curl localhost:LOCAL_PORT Hello, world!完了したら、TCP トンネルを開始したターミナルに戻り、
gcloudCLI を中断するには Control+C を押します。
異なるポートで SSH サーバーを使用する
カスタム コンテナ イメージ
では、任意のポートで SSH サーバーを使用することもできます。gcloud CLI トンネルからの接続をサポートするには、カスタム SSH サーバーを構成してパスワード認証を許可し、ターゲット ユーザーに空のパスワードを設定する必要があります。Cloud Workstations は
Cloud IAM
を使用して、承認されたトラフィックのみが SSH サーバーに送信されるようにします。
SSH セッションを永続的に維持する
ネットワーク接続が切断されると、SSH セッションが切断されます。切断中にプロセスを実行したままにして、後でセッションに再接続するには、tmux などのツールを使用します。
ワークステーションに tmux をインストールするには:
現在のセッションに
tmuxを手動でインストールして、すぐに使用できるようにします。sudo apt update sudo apt install -y tmux起動時に
tmuxをインストールするようにワークステーションを構成します。次のコマンドを含めるように/home/user/.workstation/customize_environmentファイルを作成または追加します。#!/bin/bash sudo apt update sudo apt install -y tmux詳細については、既存のワークステーション イメージを拡張せずにカスタマイズするをご覧ください。
ワークステーションの起動時に実行されるように、ファイルを実行可能にします。
chmod +x /home/user/.workstation/customize_environment
tmux がインストールされたら:
ワークステーションに接続します。
gcloud workstations ssh \ --project=PROJECT_ID \ --region=REGION \ --cluster=CLUSTER_NAME \ --config=CONFIG_NAME \ WORKSTATION_NAMEワークステーションから新しい tmux セッションを開始します。
tmux接続が切断された場合は、再接続して、ローカル ターミナルから次のコマンドを実行してセッションに接続します。
gcloud workstations ssh \ --project=PROJECT_ID \ --region=REGION \ --cluster=CLUSTER_NAME \ --config=CONFIG_NAME \ WORKSTATION_NAME \ -- -t tmux attach
次のステップ
- カスタム コンテナ イメージの SSH セッションでコンテナ環境変数を設定する
- X11 転送を有効にする カスタム コンテナ イメージ