Extensión VMAccess para Linux
La extensión VMAccess se usa para administrar usuarios administrativos, configurar SSH y comprobar o reparar discos en máquinas virtuales Linux de Azure. La extensión se integra con las plantillas de Azure Resource Manager. También se puede invocar mediante la CLI de Azure, Azure PowerShell, Azure Portal o la API REST de Azure Virtual Machines.
En este artículo se describe cómo ejecutar la extensión VMAccess desde la CLI de Azure y a través de una plantilla de Azure Resource Manager. En este artículo se proporcionan también los pasos para la solución de problemas para los sistemas Linux.
Nota:
Si usa la extensión VMAccess para restablecer la contraseña de la máquina virtual después de instalar la extensión de inicio de sesión de Microsoft Entra, vuelva a ejecutar dicha extensión para volver a habilitar el inicio de sesión de Microsoft Entra en la máquina virtual.
Requisitos previos
Distribuciones de Linux compatibles
Linux Distro | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x o superior | 9.x o superior |
Debian | 10+ | 11.x+ |
Flatcar Linux | 3374.2.x+ | 3374.2.x+ |
Azure Linux | 2.x | 2.x |
openSUSE | 12.3+ | No compatible |
Oracle Linux | 6.4+, 7.x+, 8.x+ | No compatible |
Red Hat Enterprise Linux | 6.7+, 7.x+, 8.x+ | 8.6+, 9.0+ |
Rocky Linux | 9.x o superior | 9.x o superior |
SLES | 12.x+, 15.x+ | 15.x SP4+ |
Ubuntu | 18.04+, 20.04+, 22.04+ | 20.04+, 22.04+ |
Recomendaciones
- VMAccess se diseñó para recuperar el acceso a una máquina virtual una vez que se ha perdido. En función de este principio, concede permiso de sudo a la cuenta especificada en el campo del nombre de usuario. Si no desea que un usuario obtenga permisos de sudo, inicie sesión en la máquina virtual y use herramientas integradas (por ejemplo, usermod, chage, etc.) para administrar usuarios sin privilegios.
- Solo puede tener aplicada una versión de la extensión a una máquina virtual. Para ejecutar una segunda acción, actualice la extensión existente con una nueva configuración.
- Durante una actualización del usuario, VMAccess modifica el archivo
sshd_config
y realiza una copia de seguridad de él previamente. Para restaurar la configuración SSH original de la copia de seguridad, ejecute VMAccess conrestore_backup_ssh
establecido enTrue
.
Esquema de extensión
La configuración de la extensión VMAccess incluye opciones para el nombre de usuario, las contraseñas, las claves SSH, etc. Esta información se puede almacenar en archivos de configuración, se puede especificar en la línea de comandos o se puede incluir en una plantilla de Azure Resource Manager (ARM). El siguiente esquema JSON contiene todas las propiedades disponibles para su uso en la configuración pública y protegida.
{
"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 propiedad
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
apiVersion | 2023-09-01 | date |
publisher | Microsoft.OSTCExtensions | string |
type | VMAccessForLinux | string |
typeHandlerVersion | 1.5 | int |
Valores de la propiedad settings
Nombre | Tipo de datos | Descripción |
---|---|---|
check_disk | boolean | Indica si se va a comprobar el disco (opcional). Sólo uno de check_disk y repair_disk puede ser true. |
repair_disk | boolean | Indica si se va a comprobar el disco (opcional). Sólo uno de check_disk y repair_disk puede ser true. |
disk_name | string | Nombre del disco que se va a reparar (obligatorio cuando repair_disk es true). |
username | string | Nombre del usuario que se va a administrar (necesario para todas las acciones de una cuenta de usuario). |
password | string | Contraseña que se va a establecer para la cuenta de usuario. |
ssh_key | string | Clave pública SSH que se va a agregar para la cuenta de usuario. La clave SSH puede estar en formato ssh-rsa , ssh-ed25519 o .pem . |
reset_ssh | boolean | Indica si se va a restablecer SSH o no. Si es true , reemplaza el archivo sshd_config por un archivo de recursos interno correspondiente a la configuración de SSH predeterminada para esa distribución. |
remove_user | string | Nombre del usuario que se va a quitar. No se puede utilizar con reset_ssh , restore_backup_ssh y password . |
expiration | string | Expiración que se va a establecer para la cuenta, en formato yyyy-mm-dd . El valor predeterminado es "Nunca". |
remove_prior_keys | boolean | Si se van a quitar o no claves SSH antiguas al agregar una nueva. Debe usarse con ssh_key . |
restore_backup_ssh | boolean | Indica si se va a restaurar la copia de seguridad original sshd_config. |
Implementación de plantilla
Las extensiones de VM de Azure pueden implementarse con plantillas de Azure Resource Manager (ARM). El esquema JSON detallado en la sección anterior se puede usar en una plantilla de ARM para ejecutar la extensión VMAccess durante la implementación de la plantilla. Puede encontrar una plantilla de ejemplo que incluye la extensión VMAccess en GitHub.
La configuración de JSON para una extensión de máquina virtual debe estar anidada dentro del fragmento de recursos de máquina virtual de la plantilla, en concreto en el objeto "resources": []
de la plantilla de máquina virtual y, en el caso de un conjunto de escalado de máquinas virtuales, en el objeto "virtualMachineProfile":"extensionProfile":{"extensions" :[]
.
Implementación de la CLI de Azure
Uso de comandos de usuario de máquina virtual de la CLI de Azure
Los siguientes comandos de la CLI en az vm user usan la extensión VMAccess. Para usar estos comandos, es preciso instalar la CLI de Azure más reciente e iniciar sesión en una cuenta de Azure mediante az login.
Actualizar la clave SSH
En el ejemplo siguiente se actualiza la clave SSH del usuario azureUser
en la VM denominada myVM
:
az vm user update \
--resource-group myResourceGroup \
--name myVM \
--username azureUser \
--ssh-key-value ~/.ssh/id_rsa.pub
Nota
El comando az vm user update
anexa el nuevo texto de clave pública al archivo ~/.ssh/authorized_keys
para el usuario administrador de la máquina virtual. Este comando no reemplaza ni quita las claves SSH existentes. Este comando no quita las claves anteriores establecidas en el momento de la implementación ni las actualizaciones posteriores mediante la extensión VMAccess.
Restablecimiento de contraseña
En el ejemplo siguiente se restablece la contraseña del usuario azureUser
en la máquina virtual denominada "myVM
":
az vm user update \
--resource-group myResourceGroup \
--name myVM \
--username azureUser \
--password myNewPassword
Reinicio de SSH
En el ejemplo siguiente se reinicia el demonio de SSH y se restablece la configuración de SSH a los valores predeterminados en una máquina virtual denominada "myVM
":
az vm user reset-ssh \
--resource-group myResourceGroup \
--name myVM
Nota:
El comando az vm user reset-ssh
reemplaza el archivo sshd_config por un archivo de configuración predeterminado del directorio de recursos internos. Este comando no restaura la configuración de SSH original que se encuentra en la máquina virtual.
Creación de un usuario administrativo/sudo
En el ejemplo siguiente se crea un usuario denominado myNewUser
con permisos sudo. La cuenta utiliza una clave SSH para la autenticación en la máquina virtual denominada myVM
. Este método le ayuda a recuperar el acceso a una máquina virtual cuando se pierden u olvidan las credenciales actuales. Se recomienda limitar las cuentas con permisos sudo.
az vm user update \
--resource-group myResourceGroup \
--name myVM \
--username myNewUser \
--ssh-key-value ~/.ssh/id_rsa.pub
Eliminación de un usuario
En el ejemplo siguiente se elimina un usuario denominado "myNewUser
" en la máquina virtual llamada "myVM
":
az vm user delete \
--resource-group myResourceGroup \
--name myVM \
--username myNewUser
Uso de comandos de extensión VM/VMSS de la CLI de Azure
También puede utilizar los comandos az vm extension set y az vmss extension set para ejecutar la extensión VMAccess con la configuración 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"}'
Los parámetros --settings
y --protected-settings
también aceptan rutas de acceso de archivo JSON. Por ejemplo, para actualizar la clave pública SSH de un usuario, cree un archivo JSON denominado update_ssh_key.json
y agregue la configuración en el siguiente formato. Reemplace los valores del archivo por su propia información:
{
"username":"azureuser",
"ssh_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCZ3S7gGp3rcbKmG2Y4vGZFMuMZCwoUzZNGxxxxxx2XV2x9FfAhy8iGD+lF8UdjFX3t5ebMm6BnnMh8fHwkTRdOt3LDQq8o8ElTBrZaKPxZN2thMZnODs5Hlemb2UX0oRIGRcvWqsd4oJmxsXa/Si98Wa6RHWbc9QZhw80KAcOVhmndZAZAGR+Wq6yslNo5TMOr1/ZyQAook5C4FtcSGn3Y+WczaoGWIxG4ZaWk128g79VIeJcIQqOjPodHvQAhll7qDlItVvBfMOben3GyhYTm7k4YwlEdkONm4yV/UIW0la1rmyztSBQIm9sZmSq44XXgjVmDHNF8UfCZ1ToE4r2SdwTmZv00T2i5faeYnHzxiLPA3Enub7xxxxxxwFArnqad7MO1SY1kLemhX9eFjLWN4mJe56Fu4NiWJkR9APSZQrYeKaqru4KUC68QpVasNJHbuxPSf/PcjF3cjO1+X+4x6L1H5HTPuqUkyZGgDO4ynUHbko4dhlanALcriF7tIfQR9i2r2xOyv5gxJEW/zztGqWma/d4rBoPjnf6tO7rLFHXMt/DVTkAfn5wxxtLDwkn5FMyvThRmex3BDf0gujoI1y6cOWLe9Y5geNX0oj+MXg/W0cXAtzSFocstV1PoVqy883hNoeQZ3mIGB3Q0rIUm5d9MA2bMMt31m1g3Sin6EQ== azureuser@myVM"
}
Ejecute la extensión VMAccess mediante el siguiente 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
Implementación de Azure PowerShell
Azure PowerShell puede usarse para implementar la extensión VMAccess en una máquina virtual o un conjunto de escalado de máquinas virtuales existente. Puede implementar la extensión en una máquina virtual mediante la ejecución de:
$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
También puede proporcionar y modificar la configuración de la extensión mediante cadenas:
$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 en un conjunto de escalado de máquinas virtuales, ejecute el siguiente 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
Solución de problemas y asistencia
Los registros de la extensión VMAccess existen localmente en la máquina virtual y son los más informativos en lo que respecta a la solución de problemas.
Location | Descripción |
---|---|
/var/log/waagent.log | Contiene registros del agente de Linux y muestra cuándo se produjo una actualización de la extensión. Podemos comprobarlo para garantizar que se ejecutó la extensión. |
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* | La extensión VMAccess genera registros, que se pueden encontrar aquí. El directorio contiene CommandExecution.log , donde puede encontrar cada comando ejecutado junto con su resultado, además de extension.log , que contiene registros individuales para cada ejecución. |
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-<versión más reciente>/config/* | La configuración y los archivos binarios para la extensión de máquina virtual VMAccess. |
También puede recuperar el estado de ejecución de la extensión VMAccess, junto con otras extensiones en una máquina virtual determinada, ejecutando el siguiente comando:
az vm extension list --resource-group myResourceGroup --vm-name myVM -o table
Para obtener más ayuda, puede ponerse en contacto con los expertos de Soporte técnico de la comunidad de Azure. Como alternativa, puede registrar un incidente de soporte técnico de Azure. Vaya a Soporte técnico de Azure y seleccione Obtener soporte técnico. Para más información sobre el Soporte técnico de Azure, consulte las preguntas frecuentes sobre los planes de soporte técnico de Azure.
Pasos siguientes
Para ver el código, las versiones actuales y más documentación, consulte VMAccess Linux - GitHub.