高度な方法を使用してインスタンスに接続する

Linux や Windows Server のインスタンスに接続する最も簡単な方法は、Compute Engine のツールを使用して接続することです。ただし、状況によっては、自分自身で認証情報を管理することや、別の接続パスを使用してインスタンスに接続することや、サードパーティ製ツールを使用してインスタンスに接続することが必要になる場合があります。

このガイドでは、次のタスクを行う方法を説明します。

始める前に

公開 SSH 認証鍵をインスタンスに渡す

Linux VM インスタンスに接続するには、独自の SSH 認証鍵が必要です。この鍵は、一意の秘密 SSH 認証鍵ファイルと、一致する公開 SSH 認証鍵ファイルで構成されています。SSH 認証鍵は、Compute Engine のツールを使用して接続するたびに自動的に作成されて管理されます。ただし、サードパーティ製ツールを使用して接続するには、次のいずれかの方法で公開 SSH 認証鍵をインスタンスに渡す必要があります。

  • IAM の役割を使用してインスタンス アクセスを管理します。この方法では、Google アカウントまたは管理対象ユーザー アカウントを通して公開 SSH 認証鍵をインスタンスに渡すことができます。
  • プロジェクトまたは特定のインスタンスのメタデータに SSH 認証鍵を追加します
  • そのインスタンスでの自分の公開 SSH 認証鍵を、他のユーザーに手動で構成してもらいます。

接続先のインスタンスに自分の公開 SSH 認証鍵を適用した後は、秘密 SSH 認証鍵を使用してインスタンスにアクセスできます。

サードパーティ製ツールを使用して接続する

インスタンスにアクセスするために、サードパーティ製ツールを通して自分の秘密 SSH 認証鍵を提示できます。Linux または macOS のワークステーションを使用している場合は、ssh コマンドを使用して接続できます。ただし、Windows ワークステーションには秘密 SSH 認証鍵のファイルを提示するためのツールが含まれていないので、PuTTY などの外部ツールをダウンロードする必要があります。

SSH(Linux と macOS)

ssh を使用してインスタンスに接続するには:

  1. 前述のいずれかの方法で公開 SSH 認証鍵をインスタンスに渡します

  2. Console で、接続するインスタンスの外部 IP アドレスを確認します。インスタンスのリストに移動します。

    [インスタンス] ページに移動

  3. ターミナルで ssh コマンドと秘密 SSH 認証鍵ファイルを使用し、インスタンスに接続します。ユーザー名と、接続するインスタンスの外部 IP アドレスを指定します。

    ssh -i [PATH_TO_PRIVATE_KEY] [USERNAME]@[EXTERNAL_IP_ADDRESS]

    ここで:

    • [PATH_TO_PRIVATE_KEY]秘密 SSH 認証鍵ファイルへのパスです。
    • [USERNAME] はインスタンスに接続するユーザーの名前です。公開 SSH 認証鍵のユーザー名は、SSH 認証鍵の作成時に指定されたものです。そのユーザーとしてインスタンスに接続するには、そのユーザーの有効な公開 SSH 認証鍵をインスタンスが持っていることと、それに対応する秘密 SSH 認証鍵を自分が持っていることが必要です。
    • [EXTERNAL_IP_ADDRESS] はインスタンスの外部 IP アドレスです。

接続に成功したら、ターミナルを使用してインスタンスでコマンドを実行できます。終了したら、exit コマンドを使用してインスタンスから切断します。

PuTTY(Windows)

PuTTY を使用してインスタンスに接続するには:

  1. 前述のいずれかの方法で公開 SSH 認証鍵をインスタンスに渡します

  2. putty.exe をダウンロードします

  3. PuTTY ツールを実行します。この例では、ダウンロードした putty.exe ファイルを単に実行します。接続設定を構成するためのウィンドウが開きます。

  4. Google Cloud Platform Console で、接続するインスタンスの外部 IP アドレスを確認します。インスタンスのリストに移動します。

    [インスタンス] ページに移動

  5. PuTTY ツールの [Host Name] フィールドに、ユーザー名と接続するインスタンスの外部 IP アドレスを指定します。下記の例では、ユーザー名は jane_doe で、外部 IP アドレスは 203.0.113.2 です。

    [Host Name] フィールドでの jane_doe@203.0.113.2 の設定

    ユーザー名と外部 IP アドレスを次の形式で入力します。

       [USERNAME]@[EXTERNAL_IP_ADDRESS]

    ここで:

    • [USERNAME] はインスタンスに接続するユーザーの名前です。この SSH 認証鍵のユーザー名は、SSH 認証鍵の作成時に指定されたものです。そのユーザーとしてインスタンスに接続するには、そのユーザーの有効な公開 SSH 認証鍵をインスタンスが持っていることと、それに対応する秘密 SSH 認証鍵を自分が持っていることが必要です。
    • [EXTERNAL_IP_ADDRESS] は接続するインスタンスの外部 IP アドレスです。
  6. PuTTY ウィンドウの左側で、[Connection] > [SSH] > [Auth] と移動します。

  7. [Private key file for authentication] フィールドに秘密鍵ファイルのパスを入力します。

    秘密鍵ファイルのフィールドでの my-ssh-key.ppk ファイルへのパスの設定。

  8. インスタンスから Cloud Platform ネットワーク上の他のインスタンスに接続する場合は、[Allow agent forwarding] をオンにします。たとえば、エージェント転送から踏み台インスタンスに秘密 SSH 認証鍵を転送し、外部 IP アドレスを持たないインスタンスに接続できます。

    接続しているインスタンスのエージェント転送の許可。

  9. [Open] をクリックし、インスタンスに接続するターミナルを開きます。

接続に成功したら、ターミナルを使用してインスタンスでコマンドを実行できます。終了したら、exit コマンドを使用してインスタンスから切断します。

外部 IP アドレスを持たないインスタンスへの接続

外部 IP アドレスを持たないインスタンスを作成して、外部ネットワークから分離することができます。分離されたインスタンスには、Google Cloud Platform Virtual Private Cloud(VPC)ネットワークの内部 IP アドレスしかありません。これらのインスタンスに接続するには、次のいずれかの方法を使用します。

VPN 接続を介した接続

仮想プライベート ネットワーク(VPN)を使用してローカルのオンプレミス ネットワークから Google Cloud Platform VPC に接続する場合、インスタンスの内部 IP アドレスに直接接続できます。

外部 IP アドレスを持たないインスタンスに接続するには、gcloud コマンドライン ツールを使用するか、SSH(Linux と macOS の場合)または PuTTY(Windows の場合)を使用します。

gcloud

  1. gcloud beta compute ssh コマンドを --internal-ip フラグとともに使用して、外部 IP アドレスを持たないインスタンスに接続します。

    gcloud beta compute ssh [INTERNAL_INSTANCE_NAME] --internal-ip
    

    ここで、[INTERNAL_INSTANCE_NAME] は接続するインスタンスの名前です。

接続に成功したら、ターミナルを使用して内部インスタンスでコマンドを実行できます。終了したら、exit コマンドを使用して接続を閉じ、ローカル ワークステーションに戻ることができます。

SSH

Linux または macOS ワークステーションから外部 IP アドレスを持たないインスタンスに接続するには:

  1. 前述のいずれかの方法で公開 SSH 認証鍵をインスタンスに渡します

  2. ローカルマシンで、SSH 認証鍵管理のために ssh-agent を開始します。

    $ eval ssh-agent $SHELL
    

  3. ssh-add コマンドを使用して、ローカルのパソコンからエージェントに秘密 SSH 認証鍵を読み込み、すべての SSH コマンドの認証にこの鍵が使われるようにします。

    $ ssh-add ~/.ssh/[PRIVATE_KEY]
    

    ここで、[PRIVATE_KEY] は秘密鍵ファイルのファイル名です。

  4. 接続するインスタンスの内部 IP アドレスを確認します。このアドレスは [インスタンス] ページの [内部 IP] 列に表示されます。

    [インスタンス] ページに移動

  5. SSH を使用して、外部 IP アドレスを持たないインスタンスに接続します。

    $ ssh [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]

    ここで:

    • [USERNAME] は SSH 認証鍵に付けられた名前です。
    • [INTERNAL_INSTANCE_IP_ADDRESS] は接続するインスタンスの内部 IP アドレスです。

接続に成功したら、ターミナルを使用して、外部 IP アドレスを持たないインスタンスでコマンドを実行できます。終了したら、exit コマンドを使用して接続を閉じ、ローカル ワークステーションに戻ることができます。

PuTTY

Windows ワークステーションから外部 IP アドレスを持たないインスタンスに接続するには:

  1. 前述のいずれかの方法で公開 SSH 認証鍵をインスタンスに渡します

  2. 接続するインスタンスの内部 IP アドレスを確認します。このアドレスは [インスタンス] ページの [内部 IP] 列に表示されます。

    [インスタンス] ページに移動

  3. PuTTY を使用してインスタンスに接続します。接続時に、接続するインスタンスの内部 IP アドレスを指定します。

接続に成功したら、ターミナルを使用して、外部 IP アドレスを持たないインスタンスでコマンドを実行できます。終了したら、exit コマンドを使用して接続を閉じ、ローカル ワークステーションに戻ることができます。

踏み台インスタンスを介した接続

踏み台インスタンスには、外部 IP アドレスと内部 IP アドレスがあります。外部 IP アドレスを持たない内部ネットワーク上のインスタンスにアクセスする必要がある場合、踏み台インスタンスに接続し、その踏み台インスタンスから内部インスタンスに接続できます。また、踏み台インスタンスから他のピアリングされた VPC ネットワーク上のインスタンスに接続することもできます。

踏み台インスタンスから他のインスタンスに接続するときにも秘密 SSH 認証鍵が必要です。踏み台インスタンスに gcloud コマンドライン ツールがインストールされていて、秘密鍵を自動的に管理するように構成されている場合を除き、秘密鍵を踏み台インスタンスに転送する必要があります。

外部 IP アドレスを持たないインスタンスに接続するには、gcloud コマンドライン ツールを使用するか、SSH(Linux と macOS の場合)または PuTTY(Windows の場合)を使用します。これらの例では、踏み台インスタンスで Linux オペレーティング システムが実行されている必要があります。

gcloud

gcloud コマンドライン ツールをローカル ワークステーションと踏み台インスタンスの両方にインストールしている場合は、秘密 SSH 認証鍵を踏み台インスタンスに転送しなくても、外部 IP アドレスを持たないインスタンスに接続できます。秘密鍵をローカル ワークステーションから踏み台インスタンスに転送する必要がある場合は、SSH または PuTTY の手順を使用します。

gcloud コマンドライン ツールを使用して、外部 IP アドレスを持たないインスタンスに接続するには:

  1. Linux 踏み台インスタンスに接続します。

    gcloud compute ssh [EXTERNAL_INSTANCE_NAME]
    

    ここで、[EXTERNAL_INSTANCE_NAME] は、内部ネットワークへのアクセスに使用する踏み台インスタンスの名前です。

  2. Linux 踏み台インスタンスから、gcloud beta compute ssh コマンドを --internal-ip フラグとともに使用して、内部 IP アドレスを使用するインスタンスに接続します。

    $ gcloud beta compute ssh [INTERNAL_INSTANCE_NAME] --internal-ip
    

    ここで、[INTERNAL_INSTANCE_NAME] は接続するインスタンスの名前です。

接続に成功したら、ターミナルを使用して内部インスタンスでコマンドを実行できます。終了したら、exit コマンドを使用してインスタンスへの接続を閉じ、ローカル ワークステーションに戻ることができます。

SSH

秘密鍵を踏み台インスタンスに転送する必要がある場合は、鍵を ssh-agent に追加する必要があります。次に、gcloud compute ssh コマンドまたは ssh コマンドを使用して、踏み台インスタンスへの最初の接続を確立し、SSH エージェントに鍵を転送します。このプロセスは、Linux および macOS ワークステーションでのみ機能します。秘密鍵を Windows ワークステーションから踏み台インスタンスに転送する必要がある場合は、代わりに PuTTY の手順を使用します。

Linux または macOS ワークステーションから外部 IP アドレスを持たないインスタンスに接続するには:

  1. 前述のいずれかの方法で公開 SSH 鍵を渡します。公開 SSH 鍵は、必ず Linux 踏み台インスタンスと外部 IP アドレスを持たないインスタンスの両方に渡してください。

  2. ローカルマシンで、SSH 認証鍵管理のために ssh-agent を開始します。

    $ eval ssh-agent $SHELL
    

  3. ssh-add コマンドを使用して、ローカル コンピュータからエージェントに秘密 SSH 認証鍵を読み込み、すべての SSH コマンドの認証にこの鍵が使われるようにします。

    $ ssh-add ~/.ssh/[PRIVATE_KEY]
    

    ここで、[PRIVATE_KEY] は秘密鍵ファイルのファイル名です。

  4. Linux 踏み台インスタンスの外部 IP アドレスと、接続する内部インスタンスの内部 IP アドレスを確認します。[インスタンス] ページの [外部 IP] 列と [内部 IP] 列にアドレスが表示されます。

    [インスタンス] ページに移動

  5. ssh または gcloud compute ssh を使用して、Linux 踏み台インスタンスに接続します。どちらの場合も、-A 引数を指定して、認証エージェントの転送を可能にします。

    ssh を使用して、Linux 踏み台インスタンスに接続し、秘密鍵を転送します。

    $ ssh -A [USERNAME]@[BASTION_HOST_EXTERNAL_IP_ADDRESS]

    ここで:

    • [USERNAME] は SSH 認証鍵に付けられた名前です。
    • [BASTION_HOST_EXTERNAL_IP_ADDRESS] は、内部ネットワークへのアクセスに使用している踏み台インスタンスの外部 IP アドレスです。

    また、gcloud compute ssh コマンドを使用して踏み台インスタンスに接続し、秘密鍵を転送できます。このオプションでは、gcloud コマンドライン ツールを使用して踏み台インスタンスに接続した後、通常の ssh で内部 IP アドレスに接続し、転送しておいた認証情報を使用できます。

    gcloud compute ssh --ssh-flag="-A" [BASTION_HOST_INSTANCE_NAME]
    

    ここで、[BASTION_HOST_INSTANCE_NAME] は、内部ネットワークへのアクセスに使用している踏み台インスタンスの名前です。

  6. Linux 踏み台インスタンスから、SSH を使用して外部 IP アドレスを持たないインスタンスに接続します。

    $ ssh [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]

    ここで:

    • [USERNAME] は SSH 認証鍵に付けられた名前です。
    • [INTERNAL_INSTANCE_IP_ADDRESS] は接続するインスタンスの内部 IP アドレスです。

接続に成功したら、ターミナルを使用して、外部 IP アドレスを持たないインスタンスでコマンドを実行できます。終了したら、exit コマンドを使用してインスタンスへの接続を閉じ、ローカル ワークステーションに戻ることができます。

PuTTY

Windows ワークステーションから外部 IP アドレスを持たないインスタンスに接続するには:

  1. 前述のいずれかの方法で公開 SSH 鍵を渡します。公開 SSH 鍵は、必ず Linux 踏み台インスタンスと外部 IP アドレスを持たないインスタンスの両方に渡してください。

  2. Linux 踏み台インスタンスの外部 IP アドレスと、接続する内部インスタンスの内部 IP アドレスを確認します。[インスタンス] ページの [外部 IP] 列と [内部 IP] 列にアドレスが表示されます。

    [インスタンス] ページに移動

  3. PuTTY を使用して Linux 踏み台インスタンスに接続します。[Allow agent forwarding] 設定をオンにして秘密 SSH 認証鍵を踏み台インスタンスに渡します。

  4. SSH を使用して、Linux 踏み台インスタンスから外部 IP アドレスを持たないインスタンスに接続します。

    $ ssh [USERNAME]@[INTERNAL_IP_ADDRESS]
    

    ここで:

    • [USERNAME] は SSH 認証鍵に付けられた名前です。
    • [INTERNAL_IP_ADDRESS] は接続するインスタンスの内部 IP アドレスです。

接続に成功したら、ターミナルを使用して、外部 IP アドレスを持たないインスタンスでコマンドを実行できます。終了したら、exit コマンドを使用してインスタンスへの接続を閉じ、ローカル ワークステーションに戻ることができます。

root ユーザーとしてのインスタンスへの接続

デフォルトでは、公開イメージや一般的なオペレーティング システムでは SSH を使用した root でのログインは許可されません。/etc/ssh/sshd_config SSH 構成ファイルの PermitRootLogin パラメータを no に設定することをおすすめします。

このパラメータにより、プロジェクトやインスタンス メタデータで root の SSH 認証鍵を指定しても root ユーザーとしてインスタンスに接続できません。root 許可が必要なユーザーは、sudo を使用してコマンドを実行することでその許可を取得することができます。

PowerShell ターミナルを使用して Windows インスタンスに接続する

Windows ワークステーションに PowerShell がインストールされている場合には、リモート PowerShell セッションから Windows Server インスタンスに接続できます。このプロセスは、SSH を使用して Linux インスタンスに接続する場合に似ています。

  1. リモート Windows インスタンスのユーザー名とパスワードを作成していない場合には、Windows パスワードを作成またはリセットします

  2. ファイアウォール ルールを追加し、Windows Server インスタンスが存在する Cloud Platform VPC ネットワーク上のポート 5986 を開くようにこのルールを設定します。

  3. ローカル ワークステーションで、PowerShell ターミナルを開きます。

  4. ユーザーの認証情報を格納する変数を初期化することもできます。初期化すると、インスタンスに接続するたびに、認証情報を入力する必要がなくなります。この手順をスキップすると、ユーザー名とパスワードを要求するプロンプトが後で表示されます。

    PS C:> $credentials = Get-Credential
    

  5. Enter-PSSession コマンドを使用してリモート PowerShell セッションを開始します。その際、SSL を使用するフラグと認証情報の確認をスキップするフラグを指定します。

    PS C:> Enter-PSSession -ComputerName [IP_ADDRESS] -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential $credentials
    

    [IP_ADDRESS] は、接続するインスタンスの IP アドレス、DNS 名または Windows コンピュータ名です。

接続に成功すると、コマンド プロンプトにリモート Windows インスタンスの IP アドレスが表示されます。これで、ターミナルからリモートの Windows Server インスタンスに PowerShell コマンドを実行できます。

Enter-PSSession コマンドの代わりに、Invoke-Command フラグを指定して -ScriptBlock を実行すると、インタラクティブ セッションを確立せずにリモート インスタンスで PowerShell コマンドを実行できます。

PS C:\> Invoke-Command -ComputerName [IP_ADDRESS] -ScriptBlock { [SCRIPT] } -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential $credentials

ここで:

  • [IP_ADDRESS] は、接続するインスタンスの IP アドレス、DNS 名または Windows コンピュータ名です。
  • [SCRIPT] は、リモート インスタンスで実行するコマンドです。たとえば、ログイベントのリストを表示するには、Get-EventLog -log "Windows PowerShell" を指定します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント