次の方法で共有


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 システムでのトラブルシューティング手順も示します。

Note

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+
Rocky Linux 9.x 以降 9.x 以降
SLES 12.x+、15.x+ 15.x SP4+
Ubuntu 18.04+、20.04+、22.04+ 20.04+、22.04+

ヒント

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

設定のプロパティ値

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

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

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

Note

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

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

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

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

Note

この 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

ユーザーの削除

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

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

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

次のステップ

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