Compartir a través de


Configure servidores de forma remota y segura mediante el comando Ejecutar (versión preliminar)

Ejecutar comando en servidores habilitados para Azure Arc (versión preliminar pública) utiliza el agente Connected Machine para permitirle ejecutar un script de forma remota y segura dentro de sus servidores. Esto puede ser útil en innumerables situaciones de solución de problemas, recuperación, diagnóstico y mantenimiento.

Entorno y configuración compatibles

  • Experiencias: Ejecutar comando se admite actualmente a través de la Interfaz de la línea de comandos de Azure y PowerShell.

  • Sistemas operativos: Ejecutar comando es compatible con los sistemas operativos Windows y Linux.

  • Entornos: Ejecutar comando es compatible con entornos que no son de Azure, incluidos los locales, VMware, SCVMM, AWS, GCP y OCI.

  • Coste: Ejecutar comando es gratuito, sin embargo el almacenamiento de scripts en Azure puede incurrir en facturación.

  • Configuración: Ejecutar comando no requiere más configuración ni la implementación de ninguna extensión. La versión del agente de Connected Machine debe ser 1.33 o superior.

Limitación del acceso a Ejecutar comando mediante RBAC

Enumerar los comandos de ejecución o mostrar los detalles de un comando requiere el Microsoft.HybridCompute/machines/runCommands/read permiso. El rol de lector integrado tiene este permiso, al igual que los roles superiores.

La ejecución de un comando requiere el permiso Microsoft.HybridCompute/machines/runCommands/write. El rol administrador de recursos de Azure Connected Machine y niveles superiores tienen este permiso.

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

Bloqueo de comandos de ejecución local

El agente de Connected Machine admite configuraciones locales que permiten establecer una lista de permitidos o una lista de bloqueados. Para más información, consulte Listas de permitidos y listas de bloqueados de extensiones.

Para Windows:

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"

Para Linux:

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"

CLI de Azure

En los siguientes ejemplos use az connectedmachine run-command para ejecutar un script de shell en una máquina virtual Windows de Azure.

Ejecución de un script con la máquina

Este comando entrega el script a la máquina, lo ejecuta y devuelve la salida capturada.

az connectedmachine run-command create --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG" --script "Write-Host Hello World!"

Enumerar todos los recursos RunCommand implementados en una máquina

Este comando devuelve una lista completa de comandos de ejecución implementados previamente junto con sus propiedades.

az connectedmachine run-command list --machine-name "myMachine" --resource-group "myRG"

Obtención del estado de ejecución y los resultados

Este comando recupera el progreso de la ejecución actual, incluida la salida más reciente, la hora de inicio y finalización, el código de salida y el estado terminal de la ejecución.

az connectedmachine run-command show --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"

Nota:

Los campos de salida y error de instanceView están limitados a los últimos 4 KB. Para acceder a la salida y el error completos, puede reenviar los datos de salida y error al almacenamiento de blobs en anexos mediante -outputBlobUri y -errorBlobUri parámetros al ejecutar el comando Ejecutar.

Eliminación del recurso RunCommand de la máquina

Quite el recurso RunCommand implementado anteriormente en la máquina. Si la ejecución del script sigue en curso, finaliza.

az connectedmachine run-command delete --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"

PowerShell

Ejecución de un script con la máquina

New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"

Ejecución de un script en la máquina mediante el parámetro SourceScriptUri

Los parámetros opcionales son OutputBlobUri y ErrorBlobUri.

New-AzConnectedMachineRunCommand -ResourceGroupName -MachineName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>” -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”

Enumerar todos los recursos RunCommand implementados en una máquina

Este comando devuelve una lista completa de los comandos de ejecución implementados anteriormente junto con sus propiedades.

Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"

Obtención del estado de ejecución y los resultados

Este comando recupera el progreso de la ejecución actual, incluida la salida más reciente, la hora de inicio y finalización, el código de salida y el estado terminal de la ejecución.

Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" - MachineName "myMachine" -RunCommandName "RunCommandName"

Creación o actualización del comando Ejecutar en una máquina mediante SourceScriptUri (dirección URL de SAS de blob de almacenamiento)

Cree o actualice Run Command en un equipo Windows mediante una dirección URL de SAS de un blob de almacenamiento que contiene un script de PowerShell. SourceScriptUri puede ser la dirección URL completa de SAS de un blob de almacenamiento o una dirección URL pública.

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Nota

La dirección URL de SAS debe proporcionar acceso de lectura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Las direcciones URL de SAS se pueden generar en Azure Portal mediante opciones de blob o token de SAS mediante New-AzStorageBlobSASToken. Si genera un token de SAS mediante New-AzStorageBlobSASToken, la dirección URL de SAS = "dirección URL del blob base" + "?" + "token de SAS de New-AzStorageBlobSASToken".

Obtención de una vista de instancia de Ejecutar comando para una máquina virtual. después de crear o actualizar una instancia de Ejecutar comando

Obtenga una instancia de Ejecutar comando para la máquina virtual con una vista de instancia. La vista de instancia contiene el estado de ejecución del comando run (Correcto, Error, etc.), código de salida, salida estándar y error estándar generado mediante la ejecución del script mediante Ejecutar comando. Un valor de ExitCode distinto de cero indica una ejecución incorrecta.

Get-AzConnectedMachineRunCommand -ResourceGroupName MyRG -MachineName MyMachine -RunCommandName MyRunCommand

InstanceViewExecutionState: estado del script Ejecutar comando del usuario. Consulte este estado para saber si el script se realizó correctamente o no.

ProvisioningState: estado del aprovisionamiento general de extensiones de un extremo a otro (si la plataforma de extensión pudo desencadenar el script Ejecutar comando o no).

Creación o actualización del comando Ejecutar en un equipo mediante SourceScript (texto del script)

Cree o actualice Ejecutar comando en una máquina pasando el contenido del script directamente al parámetro -SourceScript. Utilice ; para separar varios comandos.

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

Creación o actualización del comando Ejecutar en un equipo mediante OutputBlobUri, ErrorBlobUri para transmitir mensajes de error estándar y salida estándar a la salida y error Anexar blobs

Cree o actualice una instancia de Ejecutar comando en una máquina y transmita los mensajes de error estándar y la salida estándar a los blobs en anexos de salida y error.

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 - MachineName MyMachine -RunCommandName MyRunCommand3 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"-OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>

Nota:

Los blobs de salida y error deben ser de tipo AppendBlob y sus direcciones URL de SAS deben proporcionar acceso de lectura, anexión, creación y escritura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Si el blob de salida o de error no existen, se creará un blob de tipo AppendBlob. Las direcciones URL de SAS se pueden generar en Azure Portal mediante las opciones del blob, o el token de SAS mediante New-AzStorageBlobSASToken.

Crear o actualizar Ejecutar comando en una máquina como en un usuario diferente mediante los parámetros RunAsUser y RunAsPassword

Cree o actualice Run Command en un equipo como un usuario diferente mediante RunAsUser y RunAsPassword parámetros. Para que los RunAs funcionen correctamente, póngase en contacto con el administrador del equipo y asegúrese de que el usuario se agrega en la máquina, el usuario tiene acceso a los recursos a los que accede el Ejecutar comando (directorios, archivos, red, etc.) y, en el caso de la máquina Windows, el servicio "Inicio de sesión secundario" se ejecuta en la máquina.

New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword

Creación o actualización del comando Ejecutar en un recurso de máquina mediante SourceScriptUri (dirección URL SAS blob de almacenamiento)

Cree o actualice Ejecutar comando en un recurso de máquina Windows mediante una dirección URL de SAS de un blob de almacenamiento que contenga un script de PowerShell.

New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Nota:

La dirección URL de SAS debe proporcionar acceso de lectura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Las direcciones URL de SAS se pueden generar en Azure Portal mediante opciones de blob o token de SAS mediante New-AzStorageBlobSASToken. Si genera un token de SAS mediante New-AzStorageBlobSASToken, la dirección URL de SAS = dirección URL del blob base + "?" + token de SAS de New-AzStorageBlobSASToken.

Creación o actualización de una instancia de Ejecutar comando en una máquina mediante ScriptLocalPath (archivo de script local)

Cree o actualice una instancia de Ejecutar comando en una máquina mediante un archivo de script local que se encuentra en la máquina cliente en la que se ejecuta el cmdlet.

New-AzMachineRunCommand -ResourceGroupName MyRG0 -VMName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

Creación o actualización de Ejecutar comando en una instancia de máquina mediante parámetros y ProtectedParameter (Parámetros públicos y protegidos para script)

Utilice ProtectedParameter para pasar entradas confidenciales al script, como contraseñas, claves, etc.

  • Windows: los parámetros y ProtectedParameters se pasan al script como argumentos y se ejecutan de esta forma: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: los parámetros con nombre y sus valores se establecen en la configuración del entorno, que debe ser accesible dentro del script .sh. Para los argumentos sin nombre, pase una cadena vacía para la entrada del nombre. Los argumentos sin nombre se pasan al script y se ejecutan de esta manera: myscript.sh publicParam1value publicParam2value secret1value secret2value

Eliminación del recurso RunCommand de la máquina

Quite el recurso RunCommand implementado anteriormente en la máquina. Si la ejecución del script sigue en curso, finaliza.

Remove-AzConnetedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"

Ejecutar operaciones de comando

Ejecutar comando en servidores habilitados para Azure Arc admite las siguientes operaciones:

Operación Descripción
Create La operación para crear una orden de ejecución. Esto ejecuta el comando de ejecución.
Eliminar La operación para borrar una orden de ejecución. Si se está ejecutando, eliminar también detendrá el comando de ejecución.
Obtener La operación para obtener una orden de ejecución.
List La operación para obtener todos los comandos de ejecución de un servidor habilitado para Azure Arc.
Actualizar La operación para actualizar la orden de ejecución. Esto detiene la orden de ejecución anterior.

Nota:

Los blobs de salida y error se sobrescriben cada vez que se ejecuta el script de comando de ejecución.

Escenarios de ejemplo

Supongamos que tiene un servidor habilitado para Azure Arc llamado "2012DatacenterServer1" en el grupo de recursos "ContosoRG" con el ID de suscripción "aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa". Considere un escenario en el que necesita proporcionar acceso remoto a un punto de conexión para servidores Windows Server 2012 / R2. El acceso a Extended Security Updates habilitado por Azure Arc requiere acceso al punto de conexión www.microsoft.com/pkiops/certs. Necesita configurar remotamente una regla de firewall que permita el acceso a este punto de conexión. Utilice Ejecutar comando para permitir la conectividad a este punto de conexión.

Ejemplo 1: Acceso al punto de conexión con Ejecutar comando

Comience creando un script de comando de ejecución para proporcionar acceso al punto de conexión www.microsoft.com/pkiops/certs en su servidor habilitado para Arc de destino mediante la operación PUT.

Para proporcionar directamente el script en línea, utilice la siguiente operación:

PUT https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
  "location": "eastus2",
  "properties": {
    "source": {
      "script": "New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Action Allow -RemoteAddress $endpoint -RemotePort $port -Protocol $protocol"
    },
    "parameters": [
      {
        "name": "ruleName",
        "value": "Allow access to www.microsoft.com/pkiops/certs"
      },
      {
        "name": "endpoint",
        "value": "www.microsoft.com/pkiops/certs"
      },
      {
        "name": "port",
        "value": 433
      },
      {
        "name": "protocol",
        "value": "TCP"
      }

    ],
    "asyncExecution": false,
    "runAsUser": "contoso-user1",
    "runAsPassword": "Contoso123!"
    "timeoutInSeconds": 3600,
    "outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
    "errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
  }
}

Para enlazar con el archivo de comandos, puede utilizar la opción ScriptURI de la operación Ejecutar comando. Para esto se asume que ha preparado un archivo newnetfirewallrule.ps1 que contiene el script en línea y subido este script al almacenamiento blob.

PUT https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
  "location": "eastus2",
  "properties": {
    "source": {
      "scriptUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/newnetfirewallrule.ps1"
    },
    "parameters": [
      {
        "name": "ruleName",
        "value": " Allow access to www.microsoft.com/pkiops/certs"
      },
      {
        "name": "endpoint",
        "value": "www.microsoft.com/pkiops/certs"
      },
      {
        "name": "port",
        "value": 433
      },
      {
        "name": "protocol",
        "value": "TCP"
      }

    ],
    "asyncExecution": false,
    "runAsUser": "contoso-user1",
    "runAsPassword": "Contoso123!"
    "timeoutInSeconds": 3600,
    "outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
    "errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
  }
}

La dirección URL de SAS debe proporcionar acceso de lectura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Las URL de SAS se pueden generar en el portal de Azure mediante las opciones de blobs o el token de SAS mediante New-AzStorageBlobSASToken. Si se genera el token SAS utilizando New-AzStorageBlobSASToken, el formato de la URL SAS es: base blob URL + "?" + el token SAS de New-AzStorageBlobSASToken.

Los blobs de salida y error deben ser de tipo AppendBlob y sus direcciones URL de SAS deben proporcionar acceso de lectura, anexión, creación y escritura al blob. Se recomienda un tiempo de expiración de 24 horas para la dirección URL de SAS. Las direcciones URL de SAS se pueden generar en Azure Portal mediante las opciones del blob, o el token de SAS mediante New-AzStorageBlobSASToken.

Ejemplo 2: Obtener detalles de la orden de ejecución

Para verificar que ha aprovisionado correctamente el comando de ejecución, utilice el comando GET para recuperar detalles sobre el comando de ejecución aprovisionado:

GET https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview

Ejemplo 3: Actualizar la orden de ejecución

Supongamos que desea abrir el acceso a un punto de conexión *.waconazure.com adicional para la conectividad con el Centro de administración de Windows. Puede actualizar la orden de ejecución existente con nuevos parámetros:

PATCH https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
  "location": "eastus2",
  "properties": {
    "source": {
      "script": "New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Action Allow -RemoteAddress $endpoint -RemotePort $port -Protocol $protocol"
    },
    "parameters": [
      {
        "name": "ruleName",
        "value": "Allow access to WAC endpoint"
      },
      {
        "name": "endpoint",
        "value": "*.waconazure.com"
      },
      {
        "name": "port",
        "value": 433
      },
      {
        "name": "protocol",
        "value": "TCP"
      }
    ],
    "asyncExecution": false,
    "runAsUser": "contoso-user1",
    "runAsPassword": "Contoso123!",
    "timeoutInSeconds": 3600,
    "outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
    "errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
  }
}

Ejemplo 4: Lista de órdenes de ejecución

Antes de eliminar el comando de ejecución para Endpoint Access, asegúrese de que no haya otros comandos de ejecución para el servidor habilitado para Arc. Puede utilizar el comando de lista para obtener todos los comandos de ejecución:

LIST https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/

Ejemplo 5: Eliminar una orden de ejecución

Si ya no necesita la extensión Ejecutar comando, puede eliminarla mediante el siguiente comando:

DELETE https://management.azure.com/subscriptions/ aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview

Deshabilitación del comando Ejecutar

Para deshabilitar el comando Ejecutar en servidores habilitados para Azure Arc, abra un símbolo del sistema administrativo y ejecute los siguientes comandos. Estos comandos usan las funcionalidades de configuración del agente local para el agente de Connected Machine en la lista de bloqueos de extensión.

Windows

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"

Linux

sudo azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"