Extensão VMAccess para Linux

Cuidado

Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planeje adequadamente. Para obter mais informações, veja as Diretrizes sobre fim da vida útil do CentOS.

A Extensão VMAccess é usada para gerenciar usuários administrativos, configurar o SSH e verificar ou reparar discos em máquinas virtuais Linux do Azure. A extensão se integra com os modelos do Azure Resource Manager. Ela também pode ser invocada 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 da CLI do Azure e por meio de um modelo do Azure Resource Manager. Este artigo também fornece as etapas de solução de problemas para os sistemas do Linux.

Observação

Se você usar a extensão VMAccess para redefinir a senha da sua VM depois de instalar a extensão de logon do Microsoft Entra, execute novamente a extensão de logon do Microsoft Entra para habilitar novamente o logon do Microsoft Entra para a sua VM.

Pré-requisitos

Distribuições Linux compatíveis

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

Dicas

  • A VMAccess foi projetada para recuperar o acesso a uma VM quando esse acesso foi perdido. Com base nesse princípio, ela concede permissão sudo à conta especificada no campo nome de usuário. Se você não quiser que um usuário obtenha permissões sudo, faça logon 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 à VM. Para executar uma segunda ação, atualize a extensão existente com uma nova configuração.
  • Durante uma atualização de usuário, a VMAccess altera o arquivo sshd_config e faz um backup dele com antecedência. Para restaurar a configuração de SSH de backup original, execute a VMAccess com restore_backup_ssh definido como True.

Esquema de extensão

A configuração da Extensão VMAccess 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 ARM (Azure Resource Manager). 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 date
publicador Microsoft.OSTCExtensions string
tipo VMAccessForLinux string
typeHandlerVersion 1.5 INT

Valores da propriedade de configurações

Nome Tipo de Dados Descrição
check_disk boolean Se o disco deve ou não ser verificado (opcional). Apenas uma entre check_disk e repair_disk pode ser definida como true.
repair_disk boolean Se o disco deve ou não ser verificado (opcional). Apenas uma entre check_disk e repair_disk pode ser definida como true.
disk_name string Nome do disco a ser reparado (necessário quando repair_disk for true).
Nome de Usuário string O nome do usuário a ser gerenciado (necessário para todas as ações feitas em uma conta de usuário).
password string A senha a ser definida para a conta de usuário.
ssh_key string A chave SSH pública a ser adicionada para a conta de usuário. A chave SSH pode estar no formato ssh-rsa, ssh-ed25519 ou .pem.
reset_ssh boolean Se deseja ou não redefinir o SSH. Se true, ele substituirá o arquivo sshd_config por um arquivo de recurso interno correspondente à configuração SSH padrão para essa distribuição.
remove_user string O nome do usuário a ser removido. Não pode ser usada com reset_ssh, restore_backup_ssh e password.
expiração string Expiração a ser definida para a conta, na forma de yyyy-mm-dd. Assume o padrão de nunca.
remove_prior_keys boolean Se deseja ou não remover chaves SSH antigas ao adicionar uma nova. Deve ser usada com ssh_key.
restore_backup_ssh boolean Se deseja ou não restaurar o sshd_config de backup original.

Implantação de modelo

As extensões da VM do Azure podem ser implantadas com modelos do ARM (Azure Resource Manager). O esquema JSON detalhado na seção anterior pode ser usado em um modelo do 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 do recurso de máquina virtual do modelo, especificamente o objeto "resources": [] para o modelo de máquina virtual e para um conjunto de dimensionamento de máquinas virtuais, no objeto "virtualMachineProfile":"extensionProfile":{"extensions" :[].

Implantação da CLI do Azure

Uso dos comandos de usuário da VM da CLI do Azure

Os comandos da CLI a seguir em az vm user usam a Extensão VMAccess. Para utilizar esses comandos, é preciso instalar a CLI do Azure mais recente e entrar em uma conta do Azure usando az login.

Atualizar chave SSH

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

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

Observação

O comando az vm user update acrescenta o novo texto de chave pública ao arquivo ~/.ssh/authorized_keys para o usuário administrador na VM. Isso não substitui ou remove quaisquer chaves SSH existentes. Esse comando não removerá as chaves anteriores definidas no momento da implantação ou atualizações posteriores através da Extensão VMAccess.

Redefinir senha

O exemplo a seguir redefine a senha para o usuário azureUser na VM denominada myVM:

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

Reiniciar o SSH

O exemplo a seguir reiniciará o daemon SSH e redefine a configuração de SSH para valores padrão em uma VM denominada myVM:

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

Observação

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

Criar um usuário administrativo/sudo

O exemplo a seguir cria um usuário chamado myNewUser com permissões sudo. A conta usa uma chave SSH para autenticação na VM denominada myVM. Esse método ajuda você a recuperar o acesso a uma VM caso as credenciais atuais sejam perdidas ou esquecidas. Como melhor prática, 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

Excluir um usuário

O exemplo a seguir exclui um usuário chamado myNewUser na VM denominada myVM:

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

Uso dos 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 Extensão VMAccess 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 parâmetros --settings e --protected-settings também aceitam caminhos de arquivo JSON. Por exemplo, para atualizar a chave SSH pública de um usuário, crie um arquivo JSON chamado update_ssh_key.json e adicione as configurações no seguinte formato. 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 por meio 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áquinas virtuais. 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

Também pode fornecer e modificar as 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á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 da extensão VMAccess só existem localmente na VM e são mais informativos quando se trata de solucionar problemas.

Location Descrição
/var/log/waagent.log Contém logs do Agente Linux e mostra quando ocorreu uma atualização para a extensão. Podemos verificar isso para garantir que a extensão foi executada.
/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 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 a Extensão de VM VMAccess.

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, você pode entrar em contato com os especialistas do Azure no Suporte da Comunidade do Azure. Como alternativa, você pode registrar um incidente de suporte do Azure. Acesse o Suporte do Azure e selecione Obter suporte. Para saber mais sobre o Suporte do Azure, leia asPerguntas frequentes sobre os planos de suporte do Azure.

Próximas etapas

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