Estensione VMAccess per Linux

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux vicina allo stato end of life (EOL). Prendere in considerazione l'uso e la pianificazione di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

L'estensione VMAccess viene usata per gestire gli utenti amministratori, configurare SSH e controllare o ripristinare i dischi nelle macchine virtuali Linux di Azure. L'estensione si integra con i modelli di Azure Resource Manager. Può anche essere richiamato usando l'interfaccia della riga di comando di Azure, Azure PowerShell, il portale di Azure e l'API REST di Azure Macchine virtuali.

Questo articolo descrive come eseguire l'estensione VMAccess dall'interfaccia della riga di comando di Azure e tramite un modello di Azure Resource Manager. Sono inoltre illustrate le procedure di risoluzione dei problemi per i sistemi Linux.

Nota

Se si usa l'estensione VMAccess per reimpostare la password della macchina virtuale dopo aver installato l'estensione Microsoft Entra Login, eseguire nuovamente l'estensione Microsoft Entra Login per riabilitare Microsoft Entra Login per la macchina virtuale.

Prerequisiti

Distribuzioni Linux supportate

Distribuzione Linux x64 ARM64
Alma Linux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Non supportato
Oracle Linux 6.4+, 7.x+, 8.x+ Non supportato
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+

Suggerimenti

  • VMAccess è stato progettato per ottenere nuovamente l'accesso a una macchina virtuale, dato che l'accesso viene perso. In base a questo principio, concede l'autorizzazione sudo all'account specificato nel campo nome utente. Se non si desidera che un utente ottenga le autorizzazioni sudo, accedere alla macchina virtuale e usare gli strumenti predefiniti (ad esempio, usermod, chage e così via) per gestire gli utenti senza privilegi.
  • È possibile avere una sola versione dell'estensione applicata a una macchina virtuale. Per eseguire una seconda azione, aggiornare l'estensione esistente con una nuova configurazione.
  • Durante un aggiornamento utente, VMAccess modifica il sshd_config file e ne esegue un backup in anticipo. Per ripristinare la configurazione SSH di cui è stato eseguito il backup originale, eseguire VMAccess con restore_backup_ssh impostato su True.

Schema dell'estensione

La configurazione dell'estensione VMAccess include impostazioni per nome utente, password, chiavi SSH e così via. È possibile archiviare queste informazioni nei file di configurazione, specificarla nella riga di comando o includerla in un modello di Azure Resource Manager (ARM). Lo schema JSON seguente contiene tutte le proprietà disponibili per l'uso nelle impostazioni pubbliche e protette.

{
  "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
    } 
  }
}

Valori delle proprietà

Nome Valore/Esempio Tipo di dati
apiVersion 01-09-2023 data
publisher Microsoft.OSTCExtensions string
type VMAccessForLinux string
typeHandlerVersion 1,5 int

Impostazioni valori delle proprietà

Nome Tipo di dati Descrizione
check_disk boolean Indica se controllare o meno il disco (facoltativo). Solo una tra check_disk e repair_disk può essere impostata su true.
repair_disk boolean Indica se controllare o meno il disco (facoltativo). Solo una tra check_disk e repair_disk può essere impostata su true.
disk_name string Nome del disco da ripristinare (obbligatorio quando repair_disk è true).
username string Nome dell'utente da gestire (obbligatorio per tutte le azioni in un account utente).
password string Password da impostare per l'account utente.
ssh_key string Chiave pubblica SSH da aggiungere per l'account utente. La chiave SSH può essere in ssh-rsaformato , ssh-ed25519o .pem .
reset_ssh boolean Indica se reimpostare o meno ssh. Se true, sostituisce il file sshd_config con un file di risorse interno corrispondente alla configurazione SSH predefinita per tale distribuzione.
remove_user string Nome dell'utente da rimuovere. Non è possibile usare con reset_ssh, restore_backup_sshe password.
expiration string Scadenza da impostare su per l'account, sotto forma di yyyy-mm-dd. L'impostazione predefinita non è mai.
remove_prior_keys boolean Indica se rimuovere o meno le chiavi SSH precedenti durante l'aggiunta di una nuova chiave. Deve essere usato con ssh_key.
restore_backup_ssh boolean Indica se ripristinare o meno l'sshd_config di backup originale.

Distribuzione del modello

Le estensioni della macchina virtuale di Azure possono essere distribuite con modelli di Azure Resource Manager (ARM). Lo schema JSON descritto nella sezione precedente può essere usato in un modello di Resource Manager per eseguire l'estensione VMAccess durante la distribuzione del modello. È possibile trovare un modello di esempio che include l'estensione VMAccess in GitHub.

La configurazione JSON per un'estensione macchina virtuale deve essere annidata all'interno del frammento di risorsa della macchina virtuale del modello, in particolare "resources": [] per l'oggetto per il modello di macchina virtuale e per un set di scalabilità di macchine virtuali nell'oggetto "virtualMachineProfile":"extensionProfile":{"extensions" :[] .

Distribuzione dell'interfaccia della riga di comando di Azure

Uso dei comandi utente della macchina virtuale dell'interfaccia della riga di comando di Azure

I comandi dell'interfaccia della riga di comando seguenti in az vm user usano l'estensione VMAccess. Per usare questi comandi, è necessario installare l'interfaccia della riga di comando di Azure più recente e accedere a un account Azure usando az login.

Aggiornare la chiave SSH

Nell'esempio seguente viene aggiornata la chiave SSH per l'utente azureUser nella macchina virtuale denominata myVM:

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

Nota

Il az vm user update comando aggiunge il testo della nuova chiave pubblica al ~/.ssh/authorized_keys file per l'utente amministratore nella macchina virtuale. Questo comando non sostituisce o rimuove chiavi SSH esistenti. Questo comando non rimuove le chiavi precedenti impostate in fase di distribuzione o gli aggiornamenti successivi usando l'estensione VMAccess.

Immettere una nuova password

L'esempio seguente ripristina la password per l'utente azureUser nella VM denominata myVM:

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

Riavviare SSH

L'esempio seguente riavvia il daemon SSH e reimposta la configurazione SSH sui valori predefiniti in una macchina virtuale denominata myVM:

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

Nota

Il az vm user reset-ssh comando sostituisce il file sshd_config con un file di configurazione predefinito dalla directory delle risorse interne. Questo comando non ripristina la configurazione SSH originale trovata nella macchina virtuale.

Creare un utente amministrativo/sudo

Nell'esempio seguente viene creato un utente denominato myNewUser con autorizzazioni sudo. L'account usa una chiave SSH per l'autenticazione nella macchina virtuale denominata myVM. Questo metodo consente di ottenere nuovamente l'accesso a una macchina virtuale quando le credenziali correnti vengono perse o dimenticate. Come procedura consigliata gli account con autorizzazioni sudo devono presentare limitazioni.

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

Eliminare un utente

L'esempio seguente elimina un utente denominato myNewUser nella VM denominata myVM:

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

Uso dei comandi dell'estensione VM/VMSS dell'interfaccia della riga di comando di Azure

È anche possibile usare i comandi az vm extension set e az vmss extension set per eseguire l'estensione VMAccess con la configurazione specificata.

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"}'

I --settings parametri e --protected-settings accettano anche percorsi di file JSON. Ad esempio, per aggiornare la chiave pubblica SSH di un utente, creare un file JSON denominato update_ssh_key.json e aggiungere le impostazioni nel formato seguente. Sostituire i valori all'interno del file con le proprie informazioni:

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

Eseguire l'estensione VMAccess tramite il comando seguente:

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

Distribuzione con Azure PowerShell

Azure PowerShell può essere usato per distribuire l'estensione VMAccess in una macchina virtuale o in un set di scalabilità di macchine virtuali esistente. È possibile distribuire l'estensione in una macchina virtuale eseguendo:

$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

È anche possibile specificare e modificare le impostazioni di estensione usando stringhe:

$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

Per eseguire la distribuzione in un set di scalabilità di macchine virtuali, eseguire il comando seguente:

$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

Risoluzione dei problemi e supporto

I log dell'estensione VMAccess esistono localmente nella macchina virtuale e sono più informativi per la risoluzione dei problemi.

Titolo Descrizione
/var/log/waagent.log Contiene i log dall'agente Linux e mostra quando si è verificato un aggiornamento dell'estensione. È possibile controllarlo per assicurarsi che l'estensione sia stata eseguita.
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* L'estensione VMAccess genera log, disponibili qui. La directory contiene CommandExecution.log dove è possibile trovare ogni comando eseguito insieme al relativo risultato, insieme extension.loga , che contiene singoli log per ogni esecuzione.
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-most< recent version>/config/* Configurazione e file binari per l'estensione vm VMAccess.

È anche possibile recuperare lo stato di esecuzione dell'estensione VMAccess, insieme ad altre estensioni in una determinata macchina virtuale, eseguendo il comando seguente:

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

Per altre informazioni, è possibile contattare gli esperti di Azure nel supporto della community di Azure. In alternativa, è possibile archiviare un evento imprevisto di supporto tecnico di Azure. Passare a supporto tecnico di Azure e selezionare Ottieni supporto. Per altre informazioni sul supporto tecnico di Azure, vedere le domande frequenti sui piani di supporto tecnico di Azure.

Passaggi successivi

Per visualizzare il codice, le versioni correnti e altre informazioni, vedere VMAccess Linux - GitHub.