Eseguire script nella macchina virtuale Linux usando l'azione Esegui comando

Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili

La funzionalità Esegui comando usa l'agente di macchine virtuali per eseguire gli script della shell all'interno di una macchina virtuale Linux di Azure. Questi script possono essere usati per la gestione generale del computer o delle applicazioni. Consentono di diagnosticare e risolvere rapidamente i problemi di accesso e di rete della macchina virtuale e di riportarla a uno stato valido.

Vantaggi

È possibile accedere alle macchine virtuali in diversi modi. La funzionalità Esegui comando può eseguire script nelle macchine virtuali in modalità remota, tramite l'agente per la macchina virtuale. Può essere usato tramite il portale di Azure, l'API REST o l'interfaccia della riga di comando di Azure per le macchine virtuali Linux.

Questa funzionalità è utile in tutti gli scenari in cui si vuole eseguire uno script all'interno di una macchina virtuale. È uno degli unici modi per risolvere i problemi e correggere una macchina virtuale che non ha la porta RDP o SSH aperta a causa della configurazione utente di rete o amministrativa.

Prerequisiti

Distribuzione di Linux supportata

Linux Distro 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+

Restrizioni

Quando si usa Esegui comando, sono valide le limitazioni seguenti:

  • L'output è limitato agli ultimi 4096 byte.
  • Il tempo minimo per eseguire uno script è di circa 20 secondi.
  • Gli script vengono eseguiti per impostazione predefinita come utente con privilegi elevati in Linux.
  • È possibile eseguire uno script alla volta.
  • Gli script che richiedono informazioni (modalità interattiva) non sono supportati.
  • Non è possibile annullare l'esecuzione di uno script.
  • Il tempo massimo di esecuzione di uno script è di 90 minuti. Successivamente, si verifica un timeout.
  • La connettività in uscita dalla macchina virtuale è necessaria per restituire i risultati dello script.

Nota

Per funzionare correttamente, Esegui comando richiede la connettività agli indirizzi IP pubblici di Azure (porta 443). Se l'estensione non ha accesso a questi endpoint, gli script potrebbero funzionare correttamente, ma non restituiranno risultati. Se si sta bloccando il traffico nella macchina virtuale, è possibile usare i tag di servizio per consentire il traffico verso gli indirizzi IP pubblici di Azure tramite il tag AzureCloud.

Comandi disponibili

Questa tabella mostra l'elenco di comandi disponibili per le macchine virtuali Linux. Si può usare il comando RunShellScript per eseguire qualsiasi script personalizzato desiderato. Quando si usa l'interfaccia della riga di comando di Azure o PowerShell per eseguire un comando, il valore specificato per il parametro --command-id o -CommandId deve essere uno dei valori elencati di seguito. Quando si specifica un valore che non è un comando disponibile, viene visualizzato questo errore:

The entity was not found in this Azure location
Nome Descrizione
RunShellScript Esegue uno script della shell di Linux.
ifconfig Visualizza la configurazione di tutte le interfacce di rete.

Interfaccia della riga di comando di Azure

L'esempio seguente usa il comando az vm run-command per eseguire uno script della shell su una macchina virtuale Linux di Azure.

az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"

Nota

Per eseguire i comandi come un utente diverso, immettere sudo -uper specificare un account utente.

Azure portal

Passare a una macchina virtuale nel portale di Azure e selezionare Esegui comando nel menu a sinistra, in Operazioni. Viene visualizzato un elenco dei comandi disponibili per l'esecuzione nella macchina virtuale.

Elenco dei comandi

Seleziona un comando da eseguire Alcuni comandi potrebbero avere parametri di input obbligatori o facoltativi. Per questi comandi, i parametri vengono presentati come campi di testo in cui immettere i valori di input. Per ogni comando è possibile vedere lo script che viene eseguito espandendo Visualizza script. RunShellScript è diverso da altri comandi, in quanto consente di fornire script personalizzati.

Nota

I comandi incorporati non sono modificabili.

Dopo aver scelto il comando, selezionare Esegui per eseguire lo script. Lo script viene eseguito e, al termine, restituisce l'output e gli eventuali errori nella finestra di output. Lo screenshot seguente illustra un esempio di output dall'esecuzione del comando ifconfig.

Eseguire l'output dello script di comando

PowerShell

L'esempio seguente usa il cmdlet Invoke-AzVMRunCommand per eseguire uno script di PowerShell in una macchina virtuale di Azure. Il cmdlet si aspetta che lo script a cui fa riferimento il parametro -ScriptPath sia presente nella posizione in cui il cmdlet viene eseguito.

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

Limitare l'accesso a Esegui comando

Per elencare i comandi di esecuzione o visualizzare i dettagli di un comando è necessaria l'autorizzazione Microsoft.Compute/locations/runCommands/read a livello di Sottoscrizione. Il ruolo predefinito Lettore e i livelli superiori hanno questa autorizzazione.

L'esecuzione di un comando richiede l'autorizzazione Microsoft.Compute/virtualMachines/runCommands/write. Il ruolo Collaboratore Macchina virtuale e i livelli superiori hanno questa autorizzazione.

È possibile usare uno dei ruoli predefiniti o creare un ruolo personalizzato per usare Esegui comando.

Risoluzione dei problemi di Esecuzione comando in Linux

Quando si esegue il comando di esecuzione dell'azione per gli ambienti Linux, fare riferimento al file di log del gestore che si trova in genere nella directory seguente: /var/log/azure/run-command-handler/handler.log per altri dettagli.

Problemi noti

I log dei comandi di esecuzione dell'azione Linux presentano alcune differenze significative rispetto al comando di esecuzione dell'azione Log di Windows:

  • Il numero di sequenza viene segnalato con ogni riga del log come 'seq=#'
  • Non ci sarà una riga che contiene Awaiting completion... perché sarà in azione eseguire solo il comando Windows.
  • La riga Command existed with code: # è presente anche solo nell'esecuzione del comando di registrazione di Windows.

Rimozione del comando Esegui azione

Se è necessario rimuovere l'estensione Linux per l'esecuzione dell'azione, vedere i passaggi seguenti per Azure PowerShell e l'interfaccia della riga di comando:

Sostituire rgname e vmname con il nome del gruppo di risorse e il nome della macchina virtuale pertinenti negli esempi di rimozione seguenti.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandLinuxExtension'
az vm run-command invoke  --command-id RemoveRunCommandLinuxExtension --name vmname -g rgname

Nota

Quando si applica di nuovo un comando Esegui, l'estensione verrà installata automaticamente. È possibile usare il comando di rimozione dell'estensione per risolvere eventuali problemi relativi all'estensione.

Passaggi successivi

Vedere Eseguire gli script nella macchina virtuale Linux per informazioni su altri modi per eseguire comandi e script in remoto nella macchina virtuale.