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 você usar a extensão VMAccess para redefinir a senha da sua VM depois de instalar a extensão Microsoft Entra Login, execute novamente a extensão Microsoft Entra Login para reativar o Microsoft Entra Login para sua VM.

Pré-requisitos

Distribuições Linux suportadas

Linux Distro x64 ARM64
Alma Linux 9.x+ 9.x+
Debian Mais de 10 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Não suportado
Oracle Linux 6.4+, 7.x+, 8.x+ Não suportado
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+

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, faça login na VM e use ferramentas internas (por exemplo, usermod, chage, 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. 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
apiVersion 2023-09-01 data
editora Microsoft.OSTCExtensions string
tipo VMAccessForLinux string
typeHandlerVersion 1.5 número inteiro

Valores da propriedade Settings

Name Tipo de Dados Description
check_disk boolean Verificar ou não o disco (opcional). Apenas um entre check_disk e repair_disk pode ser definido como true.
repair_disk boolean Verificar ou não o disco (opcional). Apenas um entre check_disk e repair_disk pode ser definido como true.
disk_name string Nome do disco a reparar (necessário quando repair_disk for verdadeiro).
nome de utilizador string O nome do usuário a ser gerenciado (necessário para todas as ações em uma conta de usuário).
password string A senha a ser definida para a conta de usuário.
ssh_key string 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 boolean 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 string O nome do usuário a ser removido. Não pode ser usado com reset_ssh, restore_backup_sshe password.
expiração string Expiração a definir para a conta, na forma de yyyy-mm-dd. O padrão é nunca.
remove_prior_keys boolean Remover ou não chaves SSH antigas ao adicionar uma nova. Deve ser utilizado com ssh_key.
restore_backup_ssh boolean Restaurar ou não o sshd_config de backup original.

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 aninhada dentro do fragmento de recurso de máquina virtual do modelo, especificamente "resources": [] objeto para o modelo de máquina virtual e para uma escala de máquina virtual definida como "virtualMachineProfile":"extensionProfile":{"extensions" :[] objeto.

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 login.

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 limitadas.

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/VMSS 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 implantar em um conjunto de dimensionamento de máquina virtual, 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.

Location Description
/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 correu.
/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

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.