Extensão VMAccess para Linux
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+ |
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 comrestore_backup_ssh
definido comoTrue
.
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.