ゼスト Tech Blog

ゼストは「護りたい。その想いを護る。」をミッションに、在宅医療・介護業界向けのSaaSを開発しています。

Azure Windows VMでRemote Desktopに接続できない場合の対応方法

title

ZESTではGoogle Cloud Platformに加え、一部Microsoft Azureも使用しています。

Azure環境ではWindows Virtual Machine(VM)を運用しているのですが、先日、Windows UpdateでRemote Desktopにアクセスできなくなる事象が発生しました。 その際に利用した、RDP接続できない場合でもVMにアクセスする方法についてご紹介します。

azコマンドからのPowerShellスクリプトの実行

learn.microsoft.com

VMエージェントがインストールされている場合*1、az コマンドからPowerShellスクリプトをリモートで実行することができます。

# script1.ps

Get-Item .
 az vm run-command invoke --command-id RunPowerShellScript --name <VM name> -g <Resource Group> --scripts @script.ps1

上記の実行結果は下記のようになります。value[].message に実行結果が格納されます。

{
  "value": [
    {
      "code": "ComponentStatus/StdOut/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "    Directory: C:\\Packages\\Plugins\\Microsoft.CPlat.Core.RunCommandWindows\\1.1.15\n\n\nMode                 LastWriteTime         Length Name                                                                 \n----                 -------------         ------ ----                                                                 \nd-----         9/17/2023   7:24 AM                Downloads                                                            \n\n",
      "time": null
    },
    {
      "code": "ComponentStatus/StdErr/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "",
      "time": null
    }
  ]
}

管理者以外でrun-commandを実行する場合には別途 Microsoft.Compute/virtualMachines/runCommands/write の権限が必要になります。

コマンドの実行には、Microsoft.Compute/virtualMachines/runCommands/write アクセス許可が必要です。 仮想マシンの共同作成者ロール以上のレベルには、このアクセス許可があります。

正常に実行結果を取得する場合には、443ポートを許可が必要になるケースがあります。

正常に機能するには、実行コマンドに Azure のパブリック IP アドレスへの接続 (ポート 443) が必要です。 この拡張機能にこれらのエンドポイントへのアクセス権がない場合、スクリプトが正常に実行されても結果が返されないことがあります。

またAzure portal実行コマンド - RunPowerShellScript メニューからも実行することができます。

Azure PortalからのPowerShell実行

Azure シリアルコンソール

learn.microsoft.com

Azure portalからシリアルコンソールに接続することができます。

事前準備として、Emergency Management Services(EMS)を有効化します。

Azure portalから 実行コマンド - Enable EMS を実行します。*2

EMSの有効化

EMS有効後、メニューの シリアルコンソール からコンソールにアクセスできます。

CMD #チャンネルを作成

ch -si 1 #チャンネルに接続

シリアルコンソールへのアクセス

ログインプロンプトが表示されるので、Windowsログインに利用しているID/PASSを入力します。

ログイン後、コマンドプロントが起動します。

コマンドプロンプト

PowerShellも起動することができます。

PowerShell

またazコマンドからシリアルコンソールに接続することもできます。

learn.microsoft.com

az serial-console connect -n <VM name> -g <Resource Group>

az コマンドによるシリアルコンソール接続

まとめ

Windows サーバにRDP接続できない場合でも、上記の方法でVMにアクセスすることができます。 今回Windows UpdateでRDP接続できない事象が発生しましたが、コマンドやコンソールからRDP接続できない原因の調査、修復をすることができました。 またRDPを用いずにVMを操作できるため、上記のような調査以外にも、作業の自動化にも利用できると思います。

*1:Azure PortalからVMを作成した場合、標準でインストールされていると思います

*2:有効化した後、VMを再起動する必要があります。