Condividi tramite


Estensione VMAccess per Linux

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+
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. Viene modificato ChallengeResponseAuthentication in no e PasswordAuthentication in yes. 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
versione dell'API 01-09-2023 data
editore Microsoft.OSTCExtensions corda
tipo VMAccessForLinux corda
versione del typeHandler 1,5 Int

Valori delle proprietà settings

Nome Tipo di dati Descrizione
verifica_disco booleano Indica se controllare o meno il disco (facoltativo). Solo una tra check_disk e repair_disk può essere impostata su true.
riparazione disco booleano Indica se controllare o meno il disco (facoltativo). Solo una tra check_disk e repair_disk può essere impostata su true.
nome_disco corda Nome del disco da ripristinare (obbligatorio quando repair_disk è true).
nome utente corda Nome dell'utente da gestire (obbligatorio per tutte le azioni in un account utente).
parola d’ordine corda Password da impostare per l'account utente.
ssh_key corda Chiave pubblica SSH da aggiungere per l'account utente. La chiave SSH può essere in ssh-rsaformato , ssh-ed25519o .pem .
reset_ssh booleano 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.
Rimuovere utente corda Nome dell'utente da rimuovere. Non è possibile usare con reset_ssh, restore_backup_sshe password.
scadenza corda Scadenza da impostare su per l'account, sotto forma di yyyy-mm-dd. L'impostazione predefinita non è mai.
rimuovi_chiavi_precedenti booleano 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 booleano Indica se ripristinare o meno l'sshd_config di backup originale.

Distribuzione modelli

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.

Reimpostazione della 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.

Ufficio 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

Messaggi di errore

Errore Descrizione
Timeout del provisioning dell'estensione macchina virtuale enablevmaccess. Il provisioning dell'estensione ha richiesto troppo tempo per il completamento. L'estensione non ha inviato un messaggio. Altre informazioni sulla risoluzione dei problemi sono disponibili all'indirizzo https://aka.ms/vmextensionlinuxtroubleshoot. Il messaggio di errore indica che il provisioning dell'estensione della macchina virtuale ‘enablevmaccess’ è scaduto perché ha impiegato troppo tempo per completarsi. Inoltre, l'estensione non ha fornito alcun messaggio di stato durante il processo. Per risolvere questo problema, provare a controllare le prestazioni e le condizioni di rete della macchina virtuale e ripetere l'operazione di provisioning. Per altre informazioni, vedere Risolvere i problemi relativi alle estensioni delle macchine virtuali.
La macchina virtuale ha segnalato un errore durante l'elaborazione dell'estensione 'enablevmaccess' (publisher 'Microsoft.OSTCExtensions' e digitare 'VMAccessForLinux'). Messaggio di errore: "Abilita non riuscita: non è specificata alcuna password o ssh_key". Per altre informazioni sulla risoluzione dei problemi, vedere https://aka.ms/vmextensionlinuxtroubleshoot . Il messaggio di errore indica che la macchina virtuale non è riuscita a elaborare l'estensione 'enablevmaccess' perché non è stata specificata alcuna password o chiave SSH. Questo errore è associato al server di pubblicazione "Microsoft.OSTCExtensions" e al tipo "VMAccessForLinux". Per risolvere questo problema, assicurarsi che durante la configurazione dell'estensione venga fornita una password o una chiave SSH.

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 al supporto di Azure e selezionare Ottenere 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.