Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O App Service fornece acesso autenticado a contentores de aplicações em execução para resolução de problemas e tarefas administrativas. Trate o acesso a contentores como uma operação privilegiada e conceda acesso apenas a utilizadores que dele necessitem.
O App Service fornece acesso SSH baseado em navegador a aplicações alojadas em contentores personalizados do Windows. Não é necessária qualquer configuração especial de imagem para a sessão do navegador.
O comando CLI do Azure az webapp exec é suportado apenas para aplicações web Linux. Não use os exemplos de CLI do Linux neste artigo para planos de Aplicação do Windows Service.
Para contentores Linux incorporados e personalizados, o terminal de navegador mais recente e az webapp exec utilizam o Kudu como proxy autenticado para se ligarem ao contentor em execução. Estas opções não exigem que instale um servidor SSH, incorpore uma palavra-passe SSH, exponha uma porta SSH ou inicie um daemon SSH na sua imagem personalizada. O acesso Legacy ao Kudu WebSSH e az webapp ssh pode ainda exigir um servidor SSH numa imagem personalizada.
Utilize o portal do Azure para uma sessão no navegador ou utilize o comando de pré-visualização az webapp exec para uma sessão de terminal local ou para execução de comandos em modo desanexado. O terminal do navegador requer /bin/bash na imagem e atualmente não suporta selecionar outro shell. Se a imagem tiver uma shell diferente, use az webapp exec --shell /bin/sh em vez disso. Imagens sem shell, incluindo imagens distroless, não conseguem abrir uma sessão interativa.
Prerequisites
- A aplicação e o seu contentor estão a funcionar.
- Está autorizado a aceder ao site SCM/Kudu da aplicação. Para permissões, consulte as permissões RBAC necessárias para aceder ao Kudu.
- O seu cliente tem acesso de rede ao endpoint SCM. Verifica as restrições de acesso da aplicação e a configuração da rede privada se não conseguires ligar-te.
- Para os exemplos de CLI, instale o CLI do Azure 2.90.0 ou posterior e inicie sessão. Verifique a sua versão com
az version. Também podes usar o Azure Cloud Shell se a sua CLI cumprir este requisito. - Para uma sessão interativa de CLI, use um terminal interativo e um shell que existam na sua imagem. O padrão é
/bin/bash; para uma imagem sem bash, especifique--shell /bin/shse esse shell estiver disponível.
Abrir sessão SSH no browser
A sua aplicação e o seu contentor devem estar a funcionar antes de abrir uma sessão do navegador.
No Portal do Azure, abra a sua aplicação do Serviço de Aplicações. Em Ferramentas de Desenvolvimento, selecione SSH e depois selecione Go. Inicie sessão com a sua conta Azure se for solicitado.
A sessão abre no seu navegador, onde pode executar comandos dentro do contentor da aplicação.
Abrir sessão SSH com a CLI do Azure
O comando preview az webapp exec abre um shell interativo no contentor principal da sua aplicação. A sessão usa o teu terminal local no Windows, macOS e Linux; não abre um navegador.
az webapp exec --resource-group <resource-group-name> --name <app-name>
Para uma imagem que usa /bin/sh em vez de bash:
az webapp exec --resource-group <resource-group-name> --name <app-name> --shell /bin/sh
Pode executar comandos e inspecionar a sua saída nesta sessão. Por exemplo, use top se estiver incluído na imagem. Para inspecionar o contentor SCM/Kudu em vez do contentor da app:
az webapp exec --resource-group <resource-group-name> --name <app-name> --target kudu
A aplicação e os contentores Kudu são ambientes diferentes. Execute comandos que dependam do tempo de execução da sua aplicação, das dependências da sua aplicação ou da conectividade de rede da sua aplicação no contentor da aplicação.
Selecione uma instância ou slot de implementação
Por defeito, a CLI liga-se a uma única instância da aplicação. Para encontrar IDs de instância:
az webapp list-instances --resource-group <resource-group-name> --name <app-name> --output table
Para ligar a uma instância específica:
az webapp exec --resource-group <resource-group-name> --name <app-name> --instance <instance-id>
Adicione --slot <slot-name> para aceder a um slot de implantação. Ao selecionar a instância de um slot, adicione --slot também a az webapp list-instances.
O modo shell interativo suporta apenas uma instância de cada vez.
Executar comandos sem uma sessão interativa
Utilize --mode execute para submeter um comando ao contentor principal da aplicação sem abrir uma sessão de terminal. O comando é executado em separado. Este modo é útil para diagnósticos em segundo plano ou outros trabalhos que não requerem saída imediata.
Importante
O modo de execução é fire-and-forget. Um resultado com estado accepted confirma apenas que o pedido foi aceite, não que o comando foi executado, concluído ou bem-sucedido. A CLI não devolve a saída padrão do comando remoto, o erro padrão ou o código de saída. Uma submissão falhada produz um erro de CLI, mas uma invocação de CLI bem-sucedida não é prova de execução remota bem-sucedida. Utilize um shell interativo quando precisar de observar o resultado imediatamente.
Executar um programa diretamente
Utilize --command para especificar um programa e os seus argumentos. Cite o comando completo:
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>
Substitui o caminho do script por um script instalado na tua aplicação. O executável e as suas dependências devem existir no contentor.
--command não interpreta operadores de shell como >, |, ou &&. Usa --shell-command em vez disso quando precisares de uma shell. Estas duas opções são mutuamente exclusivas.
Capturar a saída e verificar a conclusão
O exemplo seguinte utiliza aspas no cliente Bash, como no Cloud Shell. Submete um comando de diagnóstico apenas de leitura a uma instância e regista separadamente a sua saída e o estado de saída. Substitua <run-id> por um novo identificador para cada invocação e <instance-id> por um ID de 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'
Certifique-se de que /bin/sh e o comando de diagnóstico existem, e de que /home/LogFiles existe e é gravável. A persistência de /home em contentores personalizados depende da configuração de armazenamento da aplicação. As aspas simples impedem a shell do cliente de expandir $? e $result antes de o pedido chegar ao contentor.
Após a submissão, abra uma shell interativa de aplicação na mesma instância e inspecione os ficheiros:
cat /home/LogFiles/diagnostics-<run-id>.log
cat /home/LogFiles/diagnostics-<run-id>.exit
Um estado de saída registado de 0 indica que o comando de diagnóstico teve sucesso. Um estado diferente de zero indica falha; inspecionar o registo. Se o ficheiro de estado não existir, a conclusão do processo não foi estabelecida: o comando pode ainda estar a correr, pode não ter começado ou pode ter sido interrompido. Não infiras sucesso a partir da aceitação ou da presença de um registo parcial. Utilize um identificador de execução novo para que um ficheiro de estado mais antigo não possa ser confundido com o resultado atual.
A CLI não fornece uma API para verificar a conclusão. Redirecionar a saída para um ficheiro não o torna automaticamente disponível no streaming de registos do App Service.
Para migrações de base de dados ou outras operações que alteram o estado partilhado, selecione uma instância, verifique a conclusão separadamente e não volte a executar a operação apenas porque a submissão não devolveu saída. Mantenha o fluxo de trabalho interativo quando precisar de verificar o sucesso antes de continuar.
Executar comandos independentes em múltiplas instâncias
O modo de execução também aceita uma lista separada por vírgulas de IDs de instância ou --instance all. Os pedidos para múltiplas instâncias são submetidos em paralelo. Por exemplo, execute um script de diagnóstico por instância implantado em cada instância:
az webapp exec --resource-group <resource-group-name> --name <app-name> --mode execute --command "python3 /home/site/wwwroot/scripts/diagnostics.py" --instance all
O script deve registar os seus próprios resultados. Utilize caminhos de saída distintos por instância e por execução se o armazenamento for partilhado. Não uses all para migrações de bases de dados partilhadas ou outras operações que só tenham de ser executadas uma vez. Se algumas submissões falharem, a CLI reporta um erro, mesmo que outras instâncias possam ter aceite o comando.
Adicionar --slot <slot-name> para executar num slot de implementação.
Limitations
- O modo de execução tem como alvo apenas o contentor principal da aplicação. Só podes usar
--target kuduem modo shell interativo. - Utilize
--working-directoryou--cwdapenas em modo de execução, e forneça um caminho absoluto. - Fornecer um caminho absoluto para
--shell. No modo de execução, só pode usá-lo com--shell-command. - Esta pré-visualização não oferece transferência de ficheiros, encaminhamento de portas, nem uma opção para selecionar contentores sidecar arbitrários. Utilize métodos de implantação suportados para carregar ficheiros.
- Detached execution não é um agendador de tarefas duradouro. Um reinício ou substituição do contentor pode interromper o trabalho. Não assuma tentativas automáticas ou execução exatamente uma vez.
Controle o acesso SSH
Desative o acesso SSH em aplicações que não precisem dele, definindo a propriedade de configuração da aplicação sshEnabled para false. Os seguintes exemplos utilizam aspas JSON em Bash:
az webapp config set --resource-group <resource-group-name> --name <app-name> \
--generic-configurations '{"sshEnabled": false}'
Para ativar novamente o acesso ao SSH:
az webapp config set --resource-group <resource-group-name> --name <app-name> \
--generic-configurations '{"sshEnabled": true}'
Para inspecionar a configuração:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query sshEnabled
Adicionar --slot <slot-name> para configurar ou inspecionar um slot de deployment.
Para a governação entre aplicações e slots, use as políticas integradas as aplicações do App Service devem desativar SSH e os slots de aplicações do App Service devem desativar SSH. Consulte a referência da política do App Service para links de atribuição.
Ambas as políticas utilizam Audit por defeito e também suportam Deny e Disabled. Avaliam um valor ausente ou diferente de falso sshEnabled como não conforme. A auditoria assinala a não conformidade; a auditoria não desativa o SSH. Deny impede alterações de recursos não conformes; não reconfigura automaticamente as aplicações existentes. Pode atribuir políticas ao âmbito de subscrição ou grupo de gestão, incluindo o grupo de gestão raiz do tenant para governação a nível do tenant.
A configuração do SSH e o cumprimento das políticas não substituem a proteção do acesso ao SCM/Kudu. Utilize as permissões RBAC apropriadas e as restrições de acesso à rede.
Resolver problemas de acesso a contentores
- Confirma se a aplicação arranca com sucesso. Revise os registos de diagnóstico em caso de falhas de arranque.
- Para acesso à CLI, verifique a versão da CLI, a aplicação selecionada, o slot e a instância, e se o executável ou shell solicitado existe.
- Verifique a autorização e a conectividade de rede ao endpoint SCM. Não precisa de ativar a autenticação básica de publicação; a CLI suporta autenticação Microsoft Entra quando a autenticação básica SCM está desativada. Veja Desativar a autenticação básica.
- As alterações que fazes dentro do contentor não substituem a atualização e reimplementação da aplicação ou imagem. Os reinícios do contentor podem remover ficheiros fora do armazenamento persistente.