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 comrestore_backup_ssh
definido comoTrue
.
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-ed25519 ou .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_ssh e 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.