Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
App Service fornisce accesso autenticato ai container di app in esecuzione per la risoluzione dei problemi e compiti amministrativi. Considera l'accesso ai container come un'operazione privilegiata e concedi l'accesso solo agli utenti che ne hanno bisogno.
App Service fornisce accesso SSH tramite browser alle app ospitate in container personalizzati di Windows. Non è richiesta alcuna configurazione speciale dell'immagine per la sessione browser.
Il comando interfaccia della riga di comando di Azure az webapp exec è supportato solo per le app web Linux. Non usare gli esempi di CLI Linux presenti in questo articolo per i piani app di Windows Service.
Per container Linux integrati e personalizzati, il terminale del browser più recente e az webapp exec usano Kudu come proxy autenticato per connettersi al container in esecuzione. Queste opzioni non richiedono di installare un server SSH, incorporare una password SSH, esporre una porta SSH o avviare un daemon SSH nella tua immagine personalizzata. L'accesso legacy a Kudu WebSSH e az webapp ssh potrebbe comunque richiedere un server SSH in un'immagine personalizzata.
Usa il portale Azure per una sessione del browser, oppure usa il comando di anteprima az webapp exec per una sessione in un terminale locale o un'esecuzione di comandi in modalità disconnessa. Il terminale del browser richiede /bin/bash nell'immagine e attualmente non supporta la selezione di un'altra shell. Se l'immagine ha una shell diversa, usa az webapp exec --shell /bin/sh invece. Le immagini senza shell, incluse le immagini distroless, non possono aprire una sessione interattiva.
Prerequisites
- L'app e il suo container sono in funzione.
- Sei autorizzato ad accedere al sito SCM/Kudu dell'app. Per i permessi, vedi i permessi RBAC necessari per accedere a Kudu.
- Il tuo client ha accesso di rete all'endpoint SCM. Controlla le restrizioni di accesso dell'app e la configurazione della rete privata se non riesci a connetterti.
- Per gli esempi di CLI, installa interfaccia della riga di comando di Azure 2.90.0 o successiva e accedi. Verifica la tua versione con
az version. Puoi anche usare Azure Cloud Shell se la sua CLI soddisfa questo requisito. - Per una sessione interattiva CLI, usa un terminale interattivo e una shell che esiste nella tua immagine. Il valore predefinito è
/bin/bash; per un'immagine senza bash, specificare--shell /bin/shse quella shell è disponibile.
Aprire una sessione SSH nel browser
La tua app e il suo container devono essere in esecuzione prima di aprire una sessione del browser.
Nel portale Azure, apri la tua app App Service. Sotto Strumenti di Sviluppo, seleziona SSH, poi seleziona Go. Accedi con il tuo account Azure se richiesto.
La sessione si apre nel browser, dove puoi eseguire comandi all'interno del contenitore dell'app.
Aprire una sessione SSH con l'interfaccia della riga di comando di Azure
Il comando az webapp exec preview apre una shell interattiva nel contenitore principale della tua app. La sessione utilizza il tuo terminale locale su Windows, macOS e Linux; non apre un browser.
az webapp exec --resource-group <resource-group-name> --name <app-name>
Per un'immagine che usa /bin/sh invece di bash:
az webapp exec --resource-group <resource-group-name> --name <app-name> --shell /bin/sh
Puoi eseguire comandi e ispezionare il loro output in questa sessione. Ad esempio, usa top se è installato nell'immagine di sistema. Per ispezionare il container SCM/Kudu invece del container dell'app:
az webapp exec --resource-group <resource-group-name> --name <app-name> --target kudu
L'app e i container Kudu sono ambienti diversi. Esegui comandi che dipendono dal runtime della tua app, dalle dipendenze o dalla connettività di rete nel container dell'app.
Seleziona un'istanza o uno slot di distribuzione
Di default, la CLI si collega a un'unica istanza dell'app. Per trovare gli ID delle istanza:
az webapp list-instances --resource-group <resource-group-name> --name <app-name> --output table
Per collegarsi a un'istanza specifica:
az webapp exec --resource-group <resource-group-name> --name <app-name> --instance <instance-id>
Aggiungi --slot <slot-name> per accedere a uno slot di deployment. Quando selezioni l'istanza di uno slot, aggiungi --slot anche a az webapp list-instances.
La modalità shell interattiva supporta solo un'istanza alla volta.
Esegui comandi senza una sessione interattiva
Usa --mode execute per inviare un comando al container principale dell'app senza aprire una sessione terminale. Il comando viene eseguito in background. Questa modalità è utile per diagnostiche di background o altri lavori che non richiedono un output immediato.
Importante
La modalità esecuzione è fire-and-forget. Un risultato con stato accepted conferma solo che la richiesta è stata accettata, non che il comando sia stato eseguito, completato o riuscito. La CLI non restituisce l'output standard del comando remoto, l'errore standard o il codice di uscita. Una sottomissione fallita produce un errore CLI, ma un'invocazione CLI riuscita non costituisce prova di un'esecuzione remota riuscita. Usa una shell interattiva quando devi osservare subito il risultato.
Esegui un programma direttamente
Usa --command per specificare un programma e i suoi argomenti. Racchiudi tra virgolette l'intero comando:
az webapp exec --resource-group <resource-group-name> --name <app-name> --mode execute --command "python3 /home/site/wwwroot/scripts/diagnostics.py" --working-directory /home/site/wwwroot --instance <instance-id>
Sostituisci il percorso dello script con uno script distribuito nella tua app. L'eseguibile e le sue dipendenze devono esistere nel container.
--command non interpreta operatori shell come >, |, o &&. Usalo --shell-command invece quando ti serve una shell. Queste due opzioni sono mutuamente esclusive.
Acquisisci l'output e verifica il completamento
L'esempio seguente utilizza il quoting del client Bash, come in Cloud Shell. Invia un comando diagnostico di sola lettura a una sola istanza e registra separatamente l'output e il codice di uscita. Sostituisci <run-id> con un nuovo identificatore per ogni invocazione e <instance-id> con un ID da az webapp list-instances.
az webapp exec --resource-group <resource-group-name> --name <app-name> \
--mode execute --instance <instance-id> --shell /bin/sh \
--shell-command 'uname -a > /home/LogFiles/diagnostics-<run-id>.log 2>&1; result=$?; printf "%s\n" "$result" > /home/LogFiles/diagnostics-<run-id>.exit'
Assicurati che /bin/sh e il comando diagnostico esistano e che /home/LogFiles esista e sia scrivibile. La persistenza di /home nei contenitori personalizzati dipende dalla configurazione di archiviazione dell'app. Le virgolette singole impediscono alla shell del client di espandere $? e $result prima che la richiesta raggiunga il container.
Dopo l'invio, apri una shell interattiva sulla stessa istanza e ispeziona i file:
cat /home/LogFiles/diagnostics-<run-id>.log
cat /home/LogFiles/diagnostics-<run-id>.exit
Uno stato di uscita registrato di 0 indica che il comando diagnostico ha avuto successo. Uno stato diverso da zero indica fallimento; ispezionare il log. Se il file di stato non esiste, il completamento non è stato stabilito: il comando potrebbe ancora essere in esecuzione, potrebbe non essere iniziato o potrebbe essere stato interrotto. Non dedurre il successo dall'accettazione o dalla presenza di un log parziale. Usa un identificatore univoco dell'esecuzione così un vecchio file di stato non può essere confuso con il risultato attuale.
La CLI non fornisce un'API di completion-polling. Reindirizzare l'output a un file non lo rende automaticamente disponibile nello streaming di log degli App Service.
Per migrazioni di database o altre operazioni che cambiano stato condiviso, seleziona un'istanza , controlla il completamento separatamente e non rieseguire l'operazione solo perché la sottomissione non ha restituito alcun output. Mantieni il flusso di lavoro interattivo quando devi verificare l'esito prima di continuare.
Esegui comandi indipendenti su più istanze
La modalità esecuzione accetta anche un elenco di ID istanza separati da virgole o --instance all. Le richieste per più istanze vengono inviate in parallelo. Ad esempio, esegui su ogni istanza uno script diagnostico per istanza già distribuito:
az webapp exec --resource-group <resource-group-name> --name <app-name> --mode execute --command "python3 /home/site/wwwroot/scripts/diagnostics.py" --instance all
Lo script deve acquisire i propri risultati. Utilizzare percorsi di output distinti per istanza e per esecuzione se lo storage è condiviso. Non usare all per migrazioni di database condivisi o altre operazioni che devono essere eseguite solo una volta. Se alcune submission falliscono, la CLI segnala un errore anche se altre istanze potrebbero aver accettato il comando.
Aggiungi --slot <slot-name> per eseguire contro uno slot di deployment.
Limitations
- La modalità esecuzione prende di mira solo il contenitore principale dell'app. Puoi usarlo
--target kudusolo in modalità shell interattiva. - Usa
--working-directoryo--cwdsolo in modalità esecuzione, e fornisci un percorso assoluto. - Fornire un percorso assoluto per
--shell. In modalità esecuzione, puoi usarlo solo con--shell-command. - Questa anteprima non offre trasferimento file, port forwarding o opzione per selezionare contenitori sidecar arbitrari. Usa metodi di deployment supportati per caricare i file.
- L'esecuzione in background non è uno scheduler di job persistente. Un riavvio o una sostituzione del container può interrompere il lavoro. Non dare per scontati tentativi automatici o un'esecuzione esattamente una volta.
Gestisci l'accesso SSH
Disabilita l'accesso SSH sulle app che non ne hanno bisogno impostando la proprietà di configurazione dell'app sshEnabled su false. I seguenti esempi utilizzano virgolette JSON di Bash:
az webapp config set --resource-group <resource-group-name> --name <app-name> \
--generic-configurations '{"sshEnabled": false}'
Per riabilitare l'accesso SSH:
az webapp config set --resource-group <resource-group-name> --name <app-name> \
--generic-configurations '{"sshEnabled": true}'
Per ispezionare la configurazione:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query sshEnabled
Aggiungi --slot <slot-name> per configurare o ispezionare uno slot di deployment.
Per la governance tra app e slot, usa le politiche integrate Le app di App Service devono disabilitare SSH e Gli slot app di App Service devono disabilitare SSH. Consulta il riferimento alle policy dell'App Service per i link di assegnazione.
Entrambe le politiche per impostazione predefinita sono impostate su Audit e supportano anche Deny e Disabled. Valutano un valore assente o diverso da false sshEnabled come non conforme. L'audit segnala la non conformità; non disabilita SSH. Deny impedisce modifiche alle risorse non conformi; non riconfigura automaticamente le app esistenti. Puoi assegnare criteri all'ambito di sottoscrizione o di gruppo di gestione, incluso il gruppo di gestione radice del tenant per la governance a livello di tenant.
La configurazione SSH e la conformità alle politiche non sono sostituti per proteggere l'accesso a SCM/Kudu. Utilizzare i permessi RBAC appropriati e le restrizioni di accesso alla rete.
Risolvere i problemi di accesso ai container
- Conferma che l'app si avvii correttamente. Rivedi i log diagnostici per eventuali fallimenti all'avvio.
- Per l'accesso alla CLI, controlla la versione della CLI, l'app selezionata, lo slot e l'istanza selezionati, e se l'eseguibile o la shell richiesta esiste.
- Controlla l'autorizzazione e la connettività di rete con l'endpoint SCM. Non è necessario abilitare l'autenticazione di pubblicazione di base; la CLI supporta l'autenticazione Microsoft Entra quando l'autenticazione SCM di base è disabilitata. Vedi Disabilita l'autenticazione di base.
- Le modifiche che apporti all'interno del container non sostituiscono l'aggiornamento e la ridistribuzione dell'app o dell'immagine. I riavvii del container possono rimuovere file fuori dallo spazio di archiviazione persistente.