このページでは、インスタンスのシリアル コンソールへのインタラクティブ アクセスを有効にして、起動やネットワークの問題のデバッグ、不具合のあるインスタンスのトラブルシューティング、GRand Unified Bootloader(GRUB)の操作、その他のトラブルシューティングを実行する方法を説明します。
仮想マシン インスタンスには 4 つの仮想シリアルポートがあります。シリアルポートの操作は、入力と出力の全体がテキストモードになり、グラフィカル ユーザー インターフェースやマウスのサポートがないという点で、ターミナル ウィンドウを使用する場合に似ています。インスタンスのオペレーティング システム、BIOS、その他のシステムレベルのエンティティは多くの場合、出力をシリアルポートに書き込み、コマンドやプロンプトへの応答などの入力にアクセスできます。一般的にこれらのシステムレベルのエンティティは最初のシリアルポート(ポート 1)を使用し、シリアルポート 1 は通常、シリアル コンソールと呼ばれます。
シリアル コンソールにコマンドを発行せずにシリアルポート出力を表示するだけの場合は、getSerialPortOutput
メソッドを呼び出すか、または Cloud Logging を使用して、インスタンスがシリアルポートに書き込んだ情報を読み込みます。シリアルポート ログの表示をご覧ください。ただし、SSH 経由でのインスタンスへのアクセスで問題が発生した場合や、完全に起動していないインスタンスのトラブルシューティングを行う必要がある場合は、シリアル コンソールへのインタラクティブ アクセスを有効にすると、任意のインスタンスのシリアルポートへの接続と操作が可能になります。たとえば、シリアルポートで直接コマンドを実行することや、プロンプトに応答することが可能です。
シリアルポートを有効または無効にするときは、メタデータ サーバーが受け入れる任意のブール値を使用できます。詳細は、ブール値の設定をご覧ください。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
シリアル コンソールでのインタラクティブ アクセスの有効化
個々の VM インスタンスまたはプロジェクト全体についてインタラクティブ シリアル コンソール アクセスを有効にします。
プロジェクトのアクセスを有効にする
プロジェクトでインタラクティブ シリアル コンソール アクセスを有効にすると、そのプロジェクトに属するすべての VM インスタンスにアクセスできるようになります。
デフォルトでは、インタラクティブ シリアルポート アクセスは無効になっています。serial-port-enable
キーを FALSE
に設定することで、明示的に無効にすることもできます。いずれの場合も、インスタンス単位の設定がプロジェクトレベルの設定やデフォルトの設定よりも優先されます。
Console
- Google Cloud Console で、[メタデータ] ページに移動します。
- [編集] をクリックして、メタデータ エントリを編集します。
- キーを serial-port-enable、値を TRUE とする新しいエントリを追加します。
- 変更を保存します。
gcloud
Google Cloud CLI を使用して、次のように project-info add-metadata
コマンドを入力します。
gcloud compute project-info add-metadata \ --metadata serial-port-enable=TRUE
API
API では、projects().setCommonInstanceMetadata
メソッドに対してリクエストを実行します。このとき、キーに serial-port-enable
、値に TRUE
を指定します。
{ "fingerprint": "FikclA7UBC0=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
VM インスタンスのアクセスを有効にする
特定のインスタンスに対してインタラクティブ シリアル コンソール アクセスを有効にします。インスタンス単位の設定が存在する場合は、その設定がプロジェクト レベルの設定より優先されます。プロジェクト レベルでアクセスが有効になっている場合でも、serial-port-enable
に TRUE
の代わりに FALSE
を設定して、特定のインスタンスへのアクセスを無効にできます。同様に、プロジェクトが明示的またはデフォルトでアクセスが無効になっている場合でも、1 つ以上のインスタンスのアクセスを有効にできます。
Console
- Google Cloud Console で、[VM インスタンス] ページに移動します。
- アクセスを有効にするインスタンスをクリックします。
- [編集] をクリックします。
- [リモート アクセス] セクションで、[シリアルポート接続を有効化] チェックボックスをオンにします。
- 変更を保存します。
gcloud
Google Cloud CLI を使用して、instance-name
をインスタンス名に置き換えて instances add-metadata
コマンドを入力します。
gcloud compute instances add-metadata instance-name \ --metadata serial-port-enable=TRUE
API
API で、instances().setMetadata
メソッドに対するリクエストを実行します。このとき、キーに serial-port-enable
、値に TRUE
を指定します。
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance/setMetadata { "fingerprint": "zhma6O1w2l8=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
シリアル コンソールへの接続
インスタンスのシリアル コンソールの対話型アクセスを有効にした後にシリアル コンソールに接続するには、Google Cloud Console、Google Cloud CLI、サードパーティの SSH クライアントのいずれかを使用します。
シリアル コンソールは、SSH 認証鍵を使用してユーザーを認証します。具体的には、SSH 公開鍵をプロジェクトまたはインスタンスのメタデータに追加し、秘密鍵は接続元のローカルマシンに保存する必要があります。gcloud CLI と Google Cloud Console を使用すると、SSH 認証鍵は自動でプロジェクトに追加されます。サードパーティのクライアントを使用している場合は、SSH 認証鍵を手動で追加しなければならない場合があります。
Console
- Google Cloud Console で、[VM インスタンス] ページに移動します。
- 接続先のインスタンスをクリックします。
- [リモート アクセス] で、[シリアル コンソールに接続] をクリックして、デフォルト ポート(ポート 1)に接続します。
- 別のシリアルポートに接続する場合は、[シリアル コンソールに接続] ボタンの横にある下矢印をクリックして、必要に応じてポート番号を変更します。
- Windows インスタンスの場合は、ボタンの横にあるプルダウン メニューを開いてポート 2 へ接続し、シリアル コンソールにアクセスします。
gcloud
Google Cloud CLI の gcloud compute connect-to-serial-port
サブコマンドを使用して接続します。instance-name
は、アクセスするシリアル コンソールのインスタンス名に置き換えます。
gcloud compute connect-to-serial-port instance-name
デフォルトでは、connect-to-serial-port
コマンドはシリアル コンソールのポート 1 に接続します。Windows VM インスタンスに接続する場合は、代わりにポート 2 に接続します。
gcloud compute connect-to-serial-port instance-name \ --port 2
その他のポートに接続するには、--port
フラグを使用して別のポート番号を割り当てます。ポート番号には、1 以上 4 以下を指定できます。ポート番号の詳細については、シリアルポート番号についてをご覧ください。
その他の SSH クライアント
サードパーティの SSH クライアントでも、それが TCP ポート 9600 に接続できるのであれば、インスタンスのシリアル コンソールに接続できます。
たとえば、次の SSH コマンドを使用すると、プロジェクト ID が myproject
のプロジェクトのインスタンス example-instance
のデフォルト シリアルポート(1)に、ユーザー名 jane
で接続します。インスタンスはゾーン us-central1-f
内にあります。また、private-ssh-key-file
はインスタンスの秘密 SSH 鍵ファイルで置き換えます。
ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane@ssh-serialport.googleapis.com
より具体的には、インスタンスのシリアル コンソールに接続するには、ログインとアドレス情報を次のように指定します。
project-id.zone.instance-name.username.options@ssh-serialport.googleapis.com
次のように置き換えます。
project-id
: このインスタンスのプロジェクト ID。zone
: インスタンスのゾーン。instance-name
: インスタンスの名前。username
: インスタンスへの接続に使用しているユーザー名。通常、これはローカルマシンのユーザー名です。options
: この接続に対して指定できる追加オプション。たとえば、特定のシリアルポートや、後述する任意の詳細オプションを指定できます。ポート番号には 1~4 を指定できます。ポート番号の詳細については、シリアルポート番号についてをご覧ください。省略した場合は、シリアルポート 1 に接続します。
Windows VM インスタンスに接続する場合は、次のコマンドを使用してポート 2 経由で接続します。
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.port=2@ssh-serialport.googleapis.com
サードパーティの SSH クライアントを使用して接続できない場合は、gcloud compute connect-to-serial-port
コマンドに --dry-run
コマンドライン オプションを付けて実行します。自動的に実行される SSH コマンドを確認して、コマンドとオプションを比較できます。
安全な接続の設定
Google Cloud CLI 以外のサードパーティの SSH クライアントを使用し、Google のシリアルポート サーバーの SSH 認証鍵を確認することで、なりすまし攻撃や中間者攻撃を防ぐことができます。サーバーの SSH 認証鍵を確認するようにシステムを設定するには、次の手順を実施します。
- Google のシリアルポート サーバーの SSH 認証鍵をダウンロードします。
- 既知のホストファイルを開きます。通常は
~/.ssh/known_hosts
にあります。 サーバーの SSH 認証鍵の内容を、鍵の先頭に
ssh-serialport.googleapis.com
を付加して追加します。たとえば、サーバーの認証鍵がssh-rsa AAAAB3NzaC1yc...
となっている場合、~/.ssh/known_hosts
は次のような形にする必要があります。ssh-serialport.googleapis.com ssh-rsa AAAAB3NzaC1yc...
Google は、セキュリティ上の理由により、Google シリアルポート サーバーの SSH 認証鍵を変更することがあります。クライアントがサーバーキーを認証できない場合は、すぐに接続の動作を中止し、前記の手順で新しい Google シリアルポート サーバーの SSH 認証鍵をダウンロードします。
ホストキーを更新しても引き続きクライアントでホスト認証エラーが発生する場合は、シリアルポートへの接続手順を中止し、Google サポートにお問い合わせください。ホスト認証が失敗している接続では、認証情報を入力しないでください。
シリアル コンソールからの接続解除
シリアル コンソールから接続を解除するには:
ENTER
キーを押します。- 「
~.
」(チルダとピリオド)を入力します。
その他のコマンドを検索するには、~?
を入力します。または、SSH のマニュアル ページを調べることができます。
man ssh
次のいずれかのコマンドを使用して切断しないでください。
CTRL+ALT+DELETE
キーの組み合わせまたは他の類似した組み合わせ。シリアル コンソールは PC キーボードのキーの組み合わせを認識しないため、このような組合せは機能しません。exit
またはlogout
コマンド。ゲストはネットワークまたはモデムの接続を認識しないため、これらのコマンドは機能しません。このコマンドを使用すると、コンソールが閉じてから再び開き、セッションに接続された状態が維持されます。セッションに対してexit
コマンドとlogout
コマンドを有効にする場合は、on-dtr-low
オプションを設定します。
ログイン プロンプトを使用したシリアル コンソールへの接続
完全に起動した VM で発生した問題や、VM がシングル ユーザーモードで起動した後に発生した問題のトラブルシューティングでシリアル コンソールにアクセスしたときに、ログイン情報を求めるプロンプトが表示される場合があります。
デフォルトでは、Google 提供の Linux システム イメージは、ローカル ユーザーにパスワード ベースのログインを許可するように構成されていません。ただし、Google 提供の Windows イメージは、ローカル ユーザーにパスワード ベースのログインを許可するように構成されています。
シリアルポート ログインが構成されたイメージを VM で実行している場合は、プロンプトが表示されたときにシリアル コンソールにログインできるように、VM にローカル パスワードを設定する必要があります。ローカル パスワードは、VM に接続した後に設定できます。また、起動スクリプトで設定することもできます。
起動スクリプトを使用したローカル パスワードの設定
VM の作成中または作成後にシリアル コンソールに接続できるように、起動スクリプトにローカル パスワードを設定できます。
以下では、VM の作成後にローカル パスワードを設定する方法について説明します。
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
ローカル パスワードを追加する VM を選択します。
[編集] をクリックします。
Linux
[メタデータ] > [自動化] セクションに移動します。
VM に既存の起動スクリプトがある場合は、それをコピーして安全な場所に貼り付けます。
次の起動スクリプトを追加します。
#!/bin/bash useradd USERNAME echo USERNAME:PASSWORD | chpasswd usermod -aG google-sudoers USERNAME
以下を置き換えます。
- USERNAME: 追加するユーザー名
- PASSWORD: ユーザー名のパスワード一部のオペレーティング システムでは最小限のパスワードの長さと複雑さが必要になることがあるため、単純なパスワードは使用しないでください。
Windows
- [カスタム メタデータ] セクションに移動します。
- VM に有効期限付きの起動スクリプトがある場合は、それをコピーして安全な場所に貼り付けます。
- [項目を追加] をクリックします。
- [キー] フィールドに「
windows-startup-script-cmd
」と入力します。 [値] フィールドに次のように入力します。
net user USERNAME PASSWORD /ADD /Y net localgroup administrators USERNAME /ADD
次のように置き換えます。
- USERNAME: 追加するユーザー名
- PASSWORD: ユーザー名のパスワード
[保存] をクリックします。
VM を再起動するには、[リセット] をクリックします。詳細については、VM をリセットするをご覧ください。
プロンプトが表示されたら、ログイン情報を入力します。
ユーザーを作成したら、VM から起動スクリプトを削除します。
VM で passwd
を使用したローカル パスワードの設定
VM 上でユーザーのローカル パスワードを設定し、そのパスワードを使ってその VM のシリアル コンソールにログインできるようにするには、次の手順を行います。
VM に接続します。ここで、
instance-name
は実際のインスタンス名に置き換えます。gcloud compute ssh instance-name
VM で、次のコマンドを使用してローカル パスワードを作成します。このコマンドは、現在ログインしているユーザーのパスワードを設定します。
sudo passwd $(whoami)
プロンプトに従ってパスワードを作成します。
次に、インスタンスからログアウトして、シリアル コンソールに接続します。
プロンプトが表示されたら、ログイン情報を入力します。
他のシリアルポートのログインの設定
ほとんどの Linux オペレーティング システムでは、デフォルトによりポート 1 でログイン プロンプトが有効になっています。しかし、ポート 1 に出力されるロギングデータや他の情報がポートの処理能力を超えることがあります。そのような場合は、次のコマンドのいずれかを VM で実行して、ポート 2(ttyS1)など別のポートでログイン プロンプトを有効にできます。VM の利用可能なポートのリストについては、シリアルポート番号についてをご覧ください。
次の表に、シリアル コンソールのログインとデフォルトのポートが事前構成されたイメージを示します。
OS | ログイン プロンプトのデフォルト ポート | サービス管理 |
---|---|---|
CentOS 6 | 1 | upstart |
CentOS 7 | 1 | systemd |
CoreOS | 1 | systemd |
COS | 1 | systemd |
Debian 8 | 1 | systemd |
Debian 9 | 1 | systemd |
OpenSUSE 13 | 1 | systemd |
OpenSUSE Leap | 1 | systemd |
RHEL 6 | 1 | upstart |