次の方法で共有


Linux 用の VMAccess 拡張機能

VMAccess 拡張機能は、管理ユーザーの管理、SSH の構成、Azure Linux 仮想マシン上のディスクの検査または修復に使用されます。 この拡張機能は Azure Resource Manager テンプレートと統合します。 また、Azure CLI、Azure PowerShell、Azure portal、Azure Virtual Machines REST API を使用して呼び出すこともできます。

この記事では、Azure CLI と Azure Resource Manager テンプレートから VMAccess 拡張機能を実行する方法について説明します。 また、Linux システムでのトラブルシューティング手順も示します。

Microsoft Entra ログイン拡張機能のインストール後に、VMAccess 拡張機能を使って VM のパスワードをリセットする場合は、Microsoft Entra ログイン拡張機能をもう一度実行して、VM の Microsoft Entra ログインを再度有効にします。

前提条件

サポートされている Linux ディストリビューション

Linux ディストリビューション x64 ARM64
Alma Linux 9.x 以降 9.x 以降
Debian 10 以降 11.x 以降
Flatcar Linux 3374.2.x 以降 3374.2.x 以降
Azure Linux 2.x 2.x
openSUSE 12.3 以降 サポートされていません
Oracle Linux 6.4+、7.x+、8.x+ サポートされていません
Red Hat Enterprise Linux 6.7+、7.x+、8.x+ 8.6+、9.0+
ロッキー・リナックス 9.x 以降 9.x 以降
SLES 12.x+、15.x+ 15.x SP4 以降
ウブントゥ 18.04+、20.04+、22.04+ 20.04+、22.04+

ヒント

  • VMAccess は、アクセスが切断された場合に VM へのアクセスを修復するように設計されています。 この原則に基づいて、ユーザー名フィールドで指定されたアカウントに sudo 権限が付与されます。 ユーザーに sudo 権限を付与しない場合は、VM にログインし、組み込みのツール (usermod、chage など) を使用して特権のないユーザーを管理します。
  • VM に適用できる拡張機能のバージョンは 1 つだけです。 2 つ目のアクションを実行するには、既存の拡張機能を新しい構成で更新します。
  • ユーザーの更新中に、VMAccess は sshd_config ファイルを変更し、事前にそのバックアップを取得します。 これにより ChallengeResponseAuthenticationno に、PasswordAuthenticationyes に変更されます。 バックアップ取得した元の SSH 構成を復元するには、restore_backup_sshTrue に設定して VMAccess を実行します。

拡張機能のスキーマ

VMAccess 拡張機能の構成には、ユーザー名、パスワード、SSH キーなどの設定が含まれています。この情報は、構成ファイルに格納したり、コマンド ラインで指定したり、Azure Resource Manager (ARM) テンプレートに含めたりすることができます。 次の JSON スキーマには、公開設定および保護された設定で使用可能なすべてのプロパティが含まれています。

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "<name>",
  "apiVersion": "2023-09-01",
  "___location": "<___location>",
  "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
  ],
  "properties": {
    "publisher": "Microsoft.OSTCExtensions",
    "type": "VMAccessForLinux",
    "typeHandlerVersion": "1.5",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "check_disk": true,
      "repair_disk": false,
      "disk_name": "<disk-name>",
    },
    "protectedSettings": {
      "username": "<username>",
      "password": "<password>",
      "ssh_key": "<ssh-key>",
      "reset_ssh": false,
      "remove_user": "<username>",
      "expiration": "<expiration>",
      "remove_prior_keys": false,
      "restore_backup_ssh": true
    } 
  }
}

プロパティ値

名前 値/例 データ型
apiVersion 2023-09-01 date
出版社 Microsoft.OSTCExtensions ひも
VMAccessForLinux ひも
typeHandlerVersion 1.5 整数 (int)

設定のプロパティ値

名前 データ型 説明
ディスクチェック ブーリアン ディスクを検査するかどうか (省略可能)。 check_diskrepair_disk のうち 1 つだけを true に設定できます。
ディスク修復 ブーリアン ディスクを検査するかどうか (省略可能)。 check_diskrepair_disk のうち 1 つだけを true に設定できます。
ディスク名 ひも 修復するディスクの名前 (repair_disk が true の場合は必須)。
ユーザー名 ひも 管理するユーザーの名前 (ユーザー アカウントに対するすべてのアクションに必須)。
パスワード ひも ユーザー アカウントに設定するパスワード。
ssh_key ひも ユーザー アカウントに追加する SSH 公開キー。 SSH キーは ssh-rsassh-ed25519.pem のいずれかの形式にすることができます。
reset_ssh ブーリアン SSH をリセットするかどうか。 true の場合、sshd_config ファイルは、そのディストロの既定の SSH 構成に対応する内部リソース ファイルに置き換えられます。
ユーザーを削除 ひも 削除するユーザーの名前。 reset_sshrestore_backup_ssh、および password では使用できません。
満了 ひも アカウントに設定する有効期限。yyyy-mm-dd 形式で指定します。 既定値は never です。
以前のキーを削除 ブーリアン 新しい SSH キーを追加するときに古い SSH キーを削除するかどうか。 ssh_key で使用する必要があります。
restore_backup_ssh ブーリアン バックアップ元の sshd_config を復元するかどうか。

テンプレートのデプロイ

Azure VM 拡張機能は、Azure Resource Manager (ARM) テンプレートでデプロイできます。 前のセクションで詳しく説明した JSON スキーマを ARM テンプレートで使用して、テンプレートのデプロイ時に VMAccess 拡張機能を実行します。 VMAccess 拡張機能を含むサンプル テンプレートは、GitHub で入手できます。

仮想マシン拡張機能の JSON の構成は、テンプレートの仮想マシン リソースのフラグメント内に入れ子にする必要があります (具体的には、仮想マシン テンプレートの場合は "resources": [] オブジェクト、仮想マシン スケール セットの場合は "virtualMachineProfile":"extensionProfile":{"extensions" :[] オブジェクト)。

Azure CLI でのデプロイ

Azure CLI VM ユーザー コマンドの使用

az vm user の下の次の CLI コマンドは、VMAccess 拡張機能を使用します。 これらのコマンドを使用するには、最新の Azure CLI をインストールし、az login を使用して Azure アカウントにサインインする必要があります。

SSH キーを更新する

次の例では、azureUser という名前の VM 上のユーザー myVM の SSH キーを更新します。

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username azureUser \
  --ssh-key-value ~/.ssh/id_rsa.pub

az vm user update コマンドは、VM 上の管理者ユーザーの ~/.ssh/authorized_keys ファイルに新しい公開キー テキストを追加します。 このコマンドによって既存の SSH キーが置き換えられたり、削除されたりすることはありません。 このコマンドによって、デプロイ時や VMAccess 拡張機能での以降の更新時に設定された以前のキーが削除されることはありません。

[パスワードのリセット]

次の例では、azureUser という名前の VM 上のユーザー myVM のパスワードをリセットします。

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username azureUser \
  --password myNewPassword

SSH を再起動する

次の例は、SSH デーモンを再起動し、myVMという名前の VM 上で SSH の構成を既定値にリセットします。

az vm user reset-ssh \
  --resource-group myResourceGroup \
  --name myVM

この az vm user reset-ssh コマンドは、sshd_config ファイルを、内部リソース ディレクトリにある既定の構成ファイルに置き換えます。 このコマンドは、仮想マシンで見つかった元の SSH 構成を復元しません。

管理/sudo ユーザーの作成

次の例では、sudo のアクセス許可を持つ myNewUser という名前のユーザーを作成します。 アカウントでは、myVM という名前の VM 上で認証用 SSH キーを使用します。 この方法は、現在の資格情報を紛失したり、忘れたりした場合に、VM へのアクセスを回復する際に役立ちます。 ベスト プラクティスとしては、sudo のアクセス許可を持つアカウントを制限する必要があります。

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser \
  --ssh-key-value ~/.ssh/id_rsa.pub

ユーザーの削除

次の例では、myNewUser という名前の VM 上のユーザー myVM を削除します。

az vm user delete \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser

Azure CLI VM/VMSS 拡張機能コマンドの使用

また、az vm extension set コマンドと az vmss extension set コマンドを使用して、指定された構成で VMAccess 拡張機能を実行することもできます。

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name VMAccessForLinux \
  --publisher Microsoft.OSTCExtensions \
  --version 1.5 \
  --settings '{"check_disk":true}'
  --protected-settings '{"username":"user1","password":"userPassword"}'

--settings パラメーターと --protected-settings パラメーターは JSON ファイル パスも受け入れます。 たとえば、ユーザーの SSH 公開キーを更新するには、update_ssh_key.json という名前の JSON ファイルを作成し、次の形式の設定を追加します。 ファイル内の値を独自の情報に置き換えてください。

{
  "username":"azureuser",
  "ssh_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCZ3S7gGp3rcbKmG2Y4vGZFMuMZCwoUzZNGxxxxxx2XV2x9FfAhy8iGD+lF8UdjFX3t5ebMm6BnnMh8fHwkTRdOt3LDQq8o8ElTBrZaKPxZN2thMZnODs5Hlemb2UX0oRIGRcvWqsd4oJmxsXa/Si98Wa6RHWbc9QZhw80KAcOVhmndZAZAGR+Wq6yslNo5TMOr1/ZyQAook5C4FtcSGn3Y+WczaoGWIxG4ZaWk128g79VIeJcIQqOjPodHvQAhll7qDlItVvBfMOben3GyhYTm7k4YwlEdkONm4yV/UIW0la1rmyztSBQIm9sZmSq44XXgjVmDHNF8UfCZ1ToE4r2SdwTmZv00T2i5faeYnHzxiLPA3Enub7xxxxxxwFArnqad7MO1SY1kLemhX9eFjLWN4mJe56Fu4NiWJkR9APSZQrYeKaqru4KUC68QpVasNJHbuxPSf/PcjF3cjO1+X+4x6L1H5HTPuqUkyZGgDO4ynUHbko4dhlanALcriF7tIfQR9i2r2xOyv5gxJEW/zztGqWma/d4rBoPjnf6tO7rLFHXMt/DVTkAfn5wxxtLDwkn5FMyvThRmex3BDf0gujoI1y6cOWLe9Y5geNX0oj+MXg/W0cXAtzSFocstV1PoVqy883hNoeQZ3mIGB3Q0rIUm5d9MA2bMMt31m1g3Sin6EQ== azureuser@myVM"
}

次のコマンドで VMAccess 拡張機能を実行します。

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name VMAccessForLinux \
  --publisher Microsoft.OSTCExtensions \
  --version 1.5 \
  --protected-settings update_ssh_key.json

Azure PowerShell でのデプロイ

Azure PowerShell を使用すると、VMAccess 拡張機能を既存の仮想マシンまたは仮想マシンのスケールセットにデプロイすることができます。 拡張機能を VM にデプロイするには、次を実行します。

$username = "<username>"
$sshKey = "<cert-contents>"

$settings = @{"check_disk" = $true};
$protectedSettings = @{"username" = $username; "ssh_key" = $sshKey};

Set-AzVMExtension -ResourceGroupName "<resource-group>" `
    -VMName "<vm-name>" `
    -Location "<___location>" `
    -Publisher "Microsoft.OSTCExtensions" `
    -ExtensionType "VMAccessForLinux" `
    -Name "VMAccessForLinux" `
    -TypeHandlerVersion "1.5" `
    -Settings $settings `
    -ProtectedSettings $protectedSettings

文字列を使用して拡張機能の設定を指定および変更することもできます。

$username = "<username>"
$sshKey = "<cert-contents>"

$settingsString = '{"check_disk":true}';
$protectedSettingsString = '{"username":"' + $username + '","ssh_key":"' + $sshKey + '"}';

Set-AzVMExtension -ResourceGroupName "<resource-group>" `
    -VMName "<vm-name>" `
    -Location "<___location>" `
    -Publisher "Microsoft.OSTCExtensions" `
    -ExtensionType "VMAccessForLinux" `
    -Name "VMAccessForLinux" `
    -TypeHandlerVersion "1.5" `
    -SettingString $settingsString `
    -ProtectedSettingString $protectedSettingsString

仮想マシン スケール セットにデプロイするには、次のコマンドを実行します。

$resourceGroupName = "<resource-group>"
$vmssName = "<vmss-name>"

$protectedSettings = @{
  "username" = "azureUser"
  "password" = "userPassword"
}

$publicSettings = @{
  "repair_disk" = $true
  "disk_name" = "<disk_name>"
}

$vmss = Get-AzVmss `
            -ResourceGroupName $resourceGroupName `
            -VMScaleSetName $vmssName

Add-AzVmssExtension -VirtualMachineScaleSet $vmss `
    -Name "<extension-name>" `
    -Publisher "Microsoft.OSTCExtensions" `
    -Type "VMAccessForLinux" `
    -TypeHandlerVersion "1.5"" `
    -AutoUpgradeMinorVersion $true `
    -Setting $publicSettings `
    -ProtectedSetting $protectedSettings

Update-AzVmss `
    -ResourceGroupName $resourceGroupName `
    -Name $vmssName `
    -VirtualMachineScaleSet $vmss

トラブルシューティングとサポート

VMAccess 拡張機能のログは、VM 上のローカルに存在し、トラブルシューティングの際に大変役に立ちます。

場所 説明
/var/log/waagent.log Linux エージェントからのログが含まれており、拡張機能の更新がいつ発生したかを示します。 そのログを検査することで、拡張機能が実行されたことを確認できます。
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* VMAccess 拡張機能によってログが生成されます。ログはここで確認できます。 このディレクトリは実行された各コマンドとその結果を検索できる CommandExecution.log、実行された各コマンドの個別ログが格納されている extension.log が含まれます。
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-<最新バージョン>/config/* VMAccess VM 拡張機能の構成とバイナリ。

次のコマンドを実行して、指定した VM 上の他の拡張機能とともに、VMAccess 拡張機能の実行状態を取得することもできます。

az vm extension list --resource-group myResourceGroup --vm-name myVM -o table

エラー メッセージ

エラー 説明
Provisioning of VM extension enablevmaccess has timed out.Extension provisioning has taken too long to complete. 拡張機能はメッセージを報告しませんでした。 トラブルシューティングの詳細については、 https://aka.ms/vmextensionlinuxtroubleshoot. このエラー メッセージは、VM 拡張機能 'enablevmaccess' のプロビジョニングが完了するまでに時間がかかりすぎてタイムアウトしたことを示します。 さらに、拡張機能はプロセス中にステータス メッセージを提供しませんでした。 この問題を解決するには、VM のパフォーマンスとネットワークの状態を確認し、プロビジョニング操作を再試行することを検討してください。 詳細については、「仮想マシン拡張機能をトラブルシューティングする」を参照してください。
拡張機能 'enablevmaccess' (パブリッシャー 'Microsoft.OSTCExtensions' とタイプ 'VMAccessForLinux') の処理中に、VM でエラーが報告されました。 エラーメッセージ: '有効化に失敗しました: パスワードまたはssh_keyが指定されていません。'. トラブルシューティングの詳細については、 https://aka.ms/vmextensionlinuxtroubleshoot を参照してください。 このエラー メッセージは、パスワードまたは SSH キーが指定されていないため、VM が 'enablevmaccess' 拡張機能の処理に失敗したことを示します。 このエラーは、'Microsoft.OSTCExtensions' パブリッシャーと 'VMAccessForLinux' 型に関連付けられています。 この問題を解決するには、拡張機能の構成中にパスワードまたは SSH キーが指定されていることを確認します。

追加のサポートが必要な場合は、「Azure コミュニティ サポート」から Azure エキスパートに問い合わせることができます。 または、Azure サポート インシデントを送信できます。 Azure サポートに移動して、[サポートを受ける] を選択します。 Azure サポートの詳細については、「Azure サポート プランに関する FAQ」をご覧ください。

次のステップ

コード、現在のバージョン、その他のドキュメントについては、「VMAccess Linux - GitHub」を参照してください。