Compartir a través de


Ejecución de scripts en la máquina virtual Linux mediante la acción Ejecutar comandos

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

La función Ejecutar comando usa el agente de máquina virtual (VM) para ejecutar los scripts de shell de una VM Linux de Azure. Puede usar estos scripts para la administración general de máquinas o aplicaciones. Pueden ayudarle a diagnosticar y corregir rápidamente el acceso a la máquina virtual y los problemas de red, así como a revertir la máquina virtual a un buen estado.

Ventajas

Puede acceder a las máquinas virtuales de varias maneras. Ejecutar comando puede ejecutar scripts en sus máquinas virtuales de forma remota con el agente de VM. La función Ejecutar comando se usa a través de Azure Portal, la API REST o la CLI de Azure para las VM con Linux.

Esta funcionalidad es útil en todos los escenarios en los que quiera ejecutar un script en una máquina virtual. Es una de las únicas formas de solucionar problemas y corregir una máquina virtual que no tenga abierto el puerto RDP o SSH debido a una configuración incorrecta de red o de usuario administrativo.

Requisitos previos

Distribuciones de Linux admitidas

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+

Restricciones

Las siguientes consideraciones se aplican al usar el Ejecutar comando:

  • La salida se limita a los últimos 4096 bytes.
  • El tiempo mínimo para ejecutar un script es de aproximadamente 20 segundos.
  • Los scripts se ejecutan de forma predeterminada como usuario con privilegios elevados en Linux.
  • Solo se puede ejecutar un script a la vez.
  • No se admiten los scripts que solicitan información (modo interactivo).
  • No se puede cancelar un script en ejecución.
  • El tiempo máximo que se puede ejecutar un script es de 90 minutos. Pasado este tiempo, se agotará el tiempo de espera del script.
  • La conectividad saliente de la máquina virtual es necesaria para devolver los resultados del script.

Nota

Para poder funcionar correctamente, Run Command requiere conectividad (puerto 443) a las direcciones IP públicas de Azure. Si la extensión no tiene acceso a estos puntos de conexión, los scripts pueden ejecutarse correctamente, pero no devuelven los resultados. Si va a bloquear el tráfico de la máquina virtual, puede usar las etiquetas de servicio para permitir el tráfico a las direcciones IP públicas de Azure mediante la etiqueta AzureCloud.

Comandos disponibles

Esta tabla muestra la lista de comandos disponibles para máquinas virtuales Linux. Puede usar el comando RunShellScript para ejecutar cualquier script personalizado. Al usar la CLI de Azure o PowerShell para ejecutar un comando, el valor que se proporciona para el parámetro --command-id o -CommandId debe ser uno de los siguientes valores. Cuando se especifica un valor que no es un comando disponible, se recibe este error:

The entity was not found in this Azure location
Nombre Descripción
RunShellScript Ejecuta un script de shell de Linux.
ifconfig Obtiene la configuración de todas las interfaces de red.

Azure CLI

El siguiente ejemplo utiliza el comando az vm run-command para ejecutar un script de shell en una máquina virtual Linux de Azure.

az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"

Nota

Para ejecutar comandos como un usuario diferente, introduzca sudo -u para especificar una cuenta de usuario.

Azure Portal

Navegue hasta una máquina virtual en Azure Portal y seleccione Ejecutar comando en el menú de la izquierda, en Operaciones. Se mostrará una lista de los comandos disponibles para ejecutarse en la máquina virtual.

Lista de comandos

Elija un comando para ejecutar. Algunos de los comandos pueden tener parámetros de entrada obligatorios u opcionales. Para estos comandos, los parámetros se presentan como campos de texto para que pueda proporcionar los valores de entrada. Para cada comando, puede ver el script que se está ejecutando si expande Ver script. RunShellScript es diferente de los otros comandos, ya que permite proporcionar sus propios scripts personalizados.

Nota

Los comandos integrados no son editables.

Después de elegir el comando, seleccione Ejecutar para ejecutar el script. Una vez finalizada la ejecución del script, se devuelven el resultado y los errores en la ventana de salida. La siguiente captura de pantalla muestra un ejemplo de salida tras ejecutar el comando ifconfig.

Salida del script del comando Ejecutar

PowerShell

En el siguiente ejemplo se utiliza el cmdlet Invoke-AzVMRunCommand para ejecutar un script de PowerShell en una VM de Azure. El cmdlet espera que el script al que se hace referencia en el parámetro -ScriptPath tenga una ubicación local allí donde se está ejecutando el cmdlet.

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

Limitación del acceso al comando Ejecutar

Para enumerar los comandos ejecutados o mostrar los detalles de un comando, se requiere el permiso Microsoft.Compute/locations/runCommands/read en el nivel de suscripción. El rol de lector integrado tiene este permiso, al igual que los roles superiores.

La ejecución de un comando requiere el permiso Microsoft.Compute/virtualMachines/runCommands/write. El rol colaborador de la máquina virtual tiene este permiso, al igual que los roles superiores.

Puede usar uno de los roles integrados o crear uno personalizado para usar Ejecutar comando.

Solución de problemas de la acción Ejecutar comando en Linux

Al solucionar problemas de la acción Ejecutar comando para entornos Linux, consulte el archivo de registro del controlador que se encuentra normalmente en el directorio /var/log/azure/run-command-handler/handler.log para más detalles.

Problemas conocidos

Los registros de la acción Ejecutar comando de Linux tienen algunas diferencias importantes en comparación con los registros de la acción Ejecutar comando de Windows:

  • El número de secuencia se notifica con cada línea del registro como "seq=#".
  • No habrá una línea que contenga Awaiting completion..., ya que solo se ejecutará en la acción Ejecutar comando de Windows.
  • La línea Command existed with code: # también está presente solo en el registro de la acción Ejecutar comando de Windows.

Eliminación de la acción Ejecutar comando

Si necesita quitar la extensión de Linux de la acción Ejecutar comando, consulte los pasos siguientes para Azure PowerShell y la CLI:

Reemplace rgname y vmname por el nombre del grupo de recursos pertinente y el nombre de la máquina virtual en los ejemplos de eliminación siguientes.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandLinuxExtension'
az vm run-command invoke  --command-id RemoveRunCommandLinuxExtension --name vmname -g rgname

Nota:

Si vuelve a aplicar Ejecutar comando, la extensión se instalará automáticamente. El comando de eliminación de extensiones se puede usar para solucionar cualquier problema relacionado con la extensión.

Pasos siguientes

Para obtener información sobre otras maneras de ejecutar comandos y scripts de forma remota en la máquina virtual, consulte Ejecución de scripts en una máquina virtual Linux.