Partilhar via


Extensão VMAccess para Linux

A Extensão VMAccess é usada para gerenciar usuários administrativos, configurar SSH e verificar ou reparar discos em máquinas virtuais Linux do Azure. A extensão integra-se com modelos do Azure Resource Manager. Ele também pode ser invocado usando a CLI do Azure, o Azure PowerShell, o portal do Azure e a API REST das Máquinas Virtuais do Azure.

Este artigo descreve como executar a extensão VMAccess a partir da CLI do Azure e através de um modelo do Azure Resource Manager. Este artigo também fornece etapas de solução de problemas para sistemas Linux.

Nota

Se utilizar a extensão VMAccess para repor a palavra-passe da sua VM depois de instalar a extensão de início de sessão do Microsoft Entra, execute novamente a extensão de início de sessão do Microsoft Entra para reativar o início de sessão do Microsoft Entra para a sua VM.

Nota

Experimenta o VM assist para diagnósticos mais rápidos. Recomendamos que execute o VM assist para Windows ou o VM assist para Linux. Essas ferramentas de diagnóstico baseadas em script ajudam você a identificar problemas comuns que afetam o Agente Convidado da VM do Azure e a integridade geral da VM.

Se estiver a experienciar problemas de desempenho com máquinas virtuais, antes de contactar o suporte, execute estas ferramentas.

Pré-requisitos

Distribuições Linux suportadas

Editora Distribuição x64 ARM64
Comunidade Alma Linux Alma Linux 8.x+, 9.x+ 8.x+, 9.x+
Credativ Debian Mais de 10 11.x+
Kinvolk Flatcar Linux 3374.2.x+ 3374.2.x+
Microsoft Azure Linux 2.x 2.x
Projeto openSUSE openSUSE 12.3+ Não suportado
Oracle Oracle Linux 6,4+, 7,x+, 8,x+ Não suportado
Red Hat Red Hat Enterprise Linux 6,7+, 7,x+, 8,x+, 9,x+, 10,x+ 8,6+, 9,0+, 10,x+
CIQ Linux rochoso 9.x+ 9.x+
SUSE SLES 12,x+, 15,x+ 15.x SP4+
Canonical Ubuntu (versões LTS) 18.04+, 20.04+, 22.04+, 24.04+ 20.04+, 22.04+, 24.04+

Sugestões

  • O VMAccess foi projetado para recuperar o acesso a uma VM dado que o acesso é perdido. Com base neste princípio, ele concede permissão sudo para a conta especificada no campo nome de usuário. Se você não deseja que um usuário obtenha permissões sudo, entre na VM e use ferramentas internas (por exemplo, usermod, change, etc.) para gerenciar usuários sem privilégios.
  • Você só pode ter uma versão da extensão aplicada a uma VM. Para executar uma segunda ação, atualize a extensão existente com uma nova configuração.
  • Durante uma atualização do usuário, o VMAccess altera o sshd_config arquivo e faz um backup dele previamente. Muda ChallengeResponseAuthentication para no e PasswordAuthentication para yes. Para restaurar a configuração SSH original de backup, execute VMAccess com restore_backup_ssh definido como True.

Esquema de extensão

A configuração VMAccess Extension inclui definições para nome de usuário, senhas, chaves SSH, etc. Você pode armazenar essas informações em arquivos de configuração, especificá-las na linha de comando ou incluí-las em um modelo do Azure Resource Manager (ARM). O esquema JSON a seguir contém todas as propriedades disponíveis para uso em configurações públicas e protegidas.

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

Valores de propriedade

Nome Valor / Exemplo Tipo de Dados
Versão da API 2023-09-01 data
editor Microsoft.OSTCExtensions cadeia (de caracteres)
tipo VMAccessForLinux cadeia (de caracteres)
typeHandlerVersion 1.5 número inteiro

Valores das propriedades de definições

Nome Tipo de Dados Descrição
verificar_disco Booleano Verificar ou não o disco (opcional). Apenas um entre check_disk e repair_disk pode ser definido como true.
reparar_disco Booleano Verificar ou não o disco (opcional). Apenas um entre check_disk e repair_disk pode ser definido como true.
nome_disco cadeia (de caracteres) Nome do disco a reparar (necessário quando repair_disk for verdadeiro).
nome de utilizador cadeia (de caracteres) O nome do usuário a ser gerenciado (necessário para todas as ações em uma conta de usuário).
palavra-passe cadeia (de caracteres) A senha a ser definida para a conta de usuário.
ssh_key cadeia (de caracteres) A chave pública SSH a ser adicionada para a conta de usuário. A chave SSH pode estar em ssh-rsa, ssh-ed25519ou .pem formato.
reset_ssh Booleano Se deve ou não redefinir o SSH. Se true, ele substitui o arquivo sshd_config por um arquivo de recurso interno correspondente à configuração SSH padrão para essa distro.
remove_user cadeia (de caracteres) O nome do usuário a ser removido. Não pode ser usado com reset_ssh, restore_backup_sshe password.
expiração cadeia (de caracteres) Expiração a definir para a conta, na forma de yyyy-mm-dd. O padrão é nunca.
remove_prior_keys Booleano Remover ou não chaves SSH antigas ao adicionar uma nova. Deve ser utilizado com ssh_key.
restore_backup_ssh Booleano Restaurar ou não o sshd_config originalmente guardado como backup.

Implementação de modelos

As Extensões de VM do Azure podem ser implantadas com modelos do Azure Resource Manager (ARM). O esquema JSON detalhado na seção anterior pode ser usado em um modelo ARM para executar a extensão VMAccess durante a implantação do modelo. Você pode encontrar um modelo de exemplo que inclui a extensão VMAccess no GitHub.

A configuração JSON para uma extensão de máquina virtual deve ser inserida dentro do fragmento de recurso de máquina virtual do modelo, especificamente no objeto "resources": [] para o modelo de máquina virtual e sob o objeto "virtualMachineProfile":"extensionProfile":{"extensions" :[] para um conjunto de dimensionamento de máquina virtual.

Implementação da CLI do Azure

Usando comandos de usuário da VM da CLI do Azure

Os seguintes comandos da CLI em az vm user usam a extensão VMAccess. Para usar esses comandos, você precisa instalar a CLI do Azure mais recente e entrar em uma conta do Azure usando az sign-in.

Update SSH key (Atualizar as chaves de SSH)

O exemplo a seguir atualiza a chave SSH para o usuário azureUser na VM chamada myVM:

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

Nota

O az vm user update comando acrescenta o novo texto de chave pública ao ~/.ssh/authorized_keys arquivo para o usuário administrador na VM. Este comando não substitui nem remove nenhuma chave SSH existente. Este comando não remove chaves anteriores definidas no momento da implantação ou atualizações subsequentes usando a extensão VMAccess.

Repor palavra-passe

O exemplo a seguir redefine a senha do usuário azureUser na VM chamada myVM:

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

Reiniciar SSH

O exemplo a seguir reinicia o daemon SSH e redefine a configuração SSH para valores padrão em uma VM chamada myVM:

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

Nota

O az vm user reset-ssh comando substitui o arquivo sshd_config por um arquivo de configuração padrão do diretório de recursos internos. Este comando não restaura a configuração SSH original encontrada na máquina virtual.

Criar um utilizador administrativo/sudo

O exemplo a seguir cria um usuário nomeado myNewUser com permissões sudo. A conta usa uma chave SSH para autenticação na VM chamada myVM. Esse método ajuda você a recuperar o acesso a uma VM quando as credenciais atuais são perdidas ou esquecidas. Como prática recomendada, as contas com permissões sudo devem ser restritas.

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

Eliminar um utilizador

O exemplo a seguir exclui um usuário nomeado myNewUser na VM chamada myVM:

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

Usando comandos de extensão VM/Virtual Machine Scale Sets da CLI do Azure

Você também pode usar os comandos az vm extension set e az vmss extension set para executar a VMAccess Extension com a configuração especificada.

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

Os --settings parâmetros e --protected-settings também aceitam caminhos de arquivo JSON. Por exemplo, para atualizar a chave pública SSH de um usuário, crie um arquivo JSON chamado update_ssh_key.json e adicione configurações no formato a seguir. Substitua os valores dentro do arquivo por suas próprias informações:

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

Execute a extensão VMAccess através do seguinte comando:

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

Implantação do Azure PowerShell

O Azure PowerShell pode ser usado para implantar a Extensão VMAccess em uma máquina virtual existente ou em um conjunto de dimensionamento de máquina virtual. Você pode implantar a extensão em uma VM executando:

$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

Você também pode fornecer e modificar configurações de extensão usando cadeias de caracteres:

$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

Para implementar num conjunto de escalonamento de máquinas virtuais, execute o seguinte comando:

$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

Solução de problemas e suporte

Os logs de extensão do VMAccess existem localmente na VM e são mais informativos quando se trata de solução de problemas.

Localização Descrição
/var/log/waagent.log Contém logs do Agente Linux e mostra quando ocorreu uma atualização para a extensão. Podemos verificá-lo para garantir que a extensão funcionou.
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* A extensão VMAccess produz logs, que podem ser encontrados aqui. O diretório contém CommandExecution.log onde você pode encontrar cada comando executado junto com seu resultado, juntamente com extension.log, que contém logs individuais para cada execução.
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-<versão mais recente>/config/* A configuração e os binários para VMAccess VM Extension.

Você também pode recuperar o estado de execução da extensão VMAccess, juntamente com outras extensões em uma determinada VM, executando o seguinte comando:

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

Mensagens de erro

Erro Descrição
O provisionamento da extensão VM enablevmaccess expirou. O provisionamento de extensão levou muito tempo para ser concluído. A extensão não relatou uma mensagem. Mais informações sobre solução de problemas estão disponíveis em https://aka.ms/vmextensionlinuxtroubleshoot. A mensagem de erro indica que o provisionamento da extensão de VM 'enablevmaccess' expirou devido a demorar muito para ser concluído. Além disso, a extensão não forneceu nenhuma mensagem de status durante o processo. Para resolver esse problema, considere verificar o desempenho da VM e as condições de rede e tente novamente a operação de provisionamento. Para obter mais informações, consulte Solucionar problemas de extensões de VM.
A VM relatou uma falha ao processar a extensão 'enablevmaccess' (editor 'Microsoft.OSTCExtensions' e tipo 'VMAccessForLinux'). Mensagem de erro: 'Falha ao ativar: nenhuma senha ou ssh_key é especificada.'. Mais informações sobre solução de problemas estão disponíveis em https://aka.ms/vmextensionlinuxtroubleshoot . A mensagem de erro indica que a VM falhou ao processar a extensão 'enablevmaccess' porque nenhuma senha ou chave SSH foi especificada. Esta falha está associada ao editor 'Microsoft.OSTCExtensions' e ao tipo 'VMAccessForLinux'. Para resolver esse problema, verifique se uma senha ou uma chave SSH é fornecida durante a configuração da extensão.

Para obter mais ajuda, pode contactar os especialistas do Azure em Suporte da Comunidade do Azure. Como alternativa, você pode registrar um incidente de suporte do Azure. Vá para Suporte do Azure e selecione Obter suporte. Para obter mais informações sobre o Suporte do Azure, leia as Perguntas frequentes sobre planos de suporte do Azure.

Próximos passos

Para ver o código, as versões atuais e mais documentação, consulte VMAccess Linux - GitHub.