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_ssh
をTrue
に設定して 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_disk と repair_disk のうち 1 つだけを true に設定できます。 |
repair_disk | boolean | ディスクを検査するかどうか (省略可能)。 check_disk と repair_disk のうち 1 つだけを true に設定できます。 |
disk_name | string | 修復するディスクの名前 (repair_disk が true の場合は必須)。 |
username | string | 管理するユーザーの名前 (ユーザー アカウントに対するすべてのアクションに必須)。 |
password | string | ユーザー アカウントに設定するパスワード。 |
ssh_key | string | ユーザー アカウントに追加する SSH 公開キー。 SSH キーは ssh-rsa 、ssh-ed25519 、.pem のいずれかの形式にすることができます。 |
reset_ssh | boolean | SSH をリセットするかどうか。 true の場合、sshd_config ファイルは、そのディストロの既定の SSH 構成に対応する内部リソース ファイルに置き換えられます。 |
remove_user | string | 削除するユーザーの名前。 reset_ssh 、restore_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」を参照してください。