Share via


Configurare in remoto e in modo sicuro i server usando il comando Esegui (anteprima)

Eseguire il comando nei server abilitati per Azure Arc (anteprima pubblica) usa l'agente del computer Connessione ed per consentire l'esecuzione remota e sicura di uno script all'interno dei server. Ciò può essere utile per una miriade di scenari per la risoluzione dei problemi, il ripristino, la diagnostica e la manutenzione.

Ambiente e configurazione supportati

  • Esperienze: l'esecuzione del comando è attualmente supportata tramite l'interfaccia della riga di comando di Azure e PowerShell.

  • Sistemi operativi: esegui comando supporta sia i sistemi operativi Windows che Linux.

  • Ambienti: Esegui comando supporta ambienti non Azure, tra cui locali, VMware, SCVMM, AWS, GCP e OCI.

  • Costo: l'esecuzione del comando è gratuita, ma l'archiviazione degli script in Azure può comportare la fatturazione.

  • Configurazione: l'esecuzione del comando non richiede più configurazione o la distribuzione di estensioni. La versione dell'agente del computer Connessione ed deve essere 1.33 o successiva.

Limitazione dell'accesso all'esecuzione del comando tramite il controllo degli accessi in base al ruolo

Elencare i comandi di esecuzione o visualizzare i dettagli di un comando richiede l'autorizzazione Microsoft.HybridCompute/machines/runCommands/read . Il ruolo predefinito Lettore e i livelli superiori hanno questa autorizzazione.

L'esecuzione di un comando richiede l'autorizzazione Microsoft.HybridCompute/machines/runCommands/write. Il ruolo Azure Connessione ed Machine Resource Amministrazione istrator e i livelli superiori dispongono di questa autorizzazione.

È possibile usare uno dei ruoli predefiniti o creare un ruolo personalizzato per usare Esegui comando.

Blocco dei comandi di esecuzione in locale

L'agente del computer Connessione ed supporta configurazioni locali che consentono di impostare un elenco di elementi consentiti o un elenco di blocchi. Per altre informazioni, vedere Elenchi consentiti di estensioni ed elenchi di blocchi.

Per Windows:

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

Per Linux:

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

Interfaccia della riga di comando di Azure

Gli esempi seguenti usano az connectedmachine run-command per eseguire uno script della shell in un computer Windows di Azure.

Eseguire uno script con il computer

Questo comando recapita lo script al computer, lo esegue e restituisce l'output acquisito.

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

Elencare tutte le risorse RunCommand distribuite in un computer

Questo comando restituisce un elenco completo dei comandi di esecuzione distribuiti in precedenza insieme alle relative proprietà.

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

Ottenere lo stato e i risultati dell'esecuzione

Questo comando recupera lo stato di avanzamento dell'esecuzione corrente, inclusi l'output più recente, l'ora di inizio/fine, il codice di uscita e lo stato terminale dell'esecuzione.

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

Nota

I campi di output e errore in instanceView sono limitati agli ultimi 4 KB. Per accedere all'output completo e all'errore, è possibile inoltrare i dati di output e di errore ai BLOB di accodamento di archiviazione usando -outputBlobUri i parametri e -errorBlobUri durante l'esecuzione di Esegui comando.

Eliminare la risorsa RunCommand dal computer

Rimuovere la risorsa RunCommand distribuita in precedenza nel computer. Se l'esecuzione dello script è ancora in corso, l'esecuzione verrà terminata.

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

PowerShell

Eseguire uno script con il computer

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

Eseguire uno script nel computer usando il parametro SourceScriptUri

OutputBlobUri e ErrorBlobUri sono parametri facoltativi.

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>”

Elencare tutte le risorse RunCommand distribuite in un computer

Questo comando restituisce un elenco completo dei comandi di esecuzione distribuiti in precedenza insieme alle relative proprietà.

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

Ottenere lo stato e i risultati dell'esecuzione

Questo comando recupera lo stato di avanzamento dell'esecuzione corrente, inclusi l'output più recente, l'ora di inizio/fine, il codice di uscita e lo stato terminale dell'esecuzione.

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

Creare o aggiornare Esegui comando in un computer usando SourceScriptUri (URL della firma di accesso condiviso del BLOB di archiviazione)

Creare o aggiornare Esegui comando in un computer Windows usando un URL di firma di accesso condiviso di un BLOB di archiviazione che contiene uno script di PowerShell. SourceScriptUri può essere l'URL di firma di accesso condiviso completo o l'URL pubblico di un BLOB di archiviazione.

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

Nota

L'URL della firma di accesso condiviso deve fornire l'accesso in lettura al BLOB. Viene suggerita una scadenza di 24 ore per l'URL della firma di accesso condiviso. Gli URL di firma di accesso condiviso possono essere generati nel portale di Azure usando le opzioni del BLOB o il token di firma di accesso condiviso tramite New-AzStorageBlobSASToken. Se si genera un token di firma di accesso condiviso con New-AzStorageBlobSASToken, l'URL di firma di accesso condiviso = "URL BLOB di base" + "?" + "Token di firma di accesso condiviso da New-AzStorageBlobSASToken"

Ottenere una visualizzazione dell'istanza del comando Esegui per un computer dopo la creazione o l'aggiornamento di Esegui comando

Ottenere un comando Esegui per il computer con visualizzazione istanza. Visualizzazione istanza contiene lo stato di esecuzione del comando run (Succeeded, Failed e così via), il codice di uscita, l'output standard e l'errore standard generato eseguendo lo script usando Esegui comando. Un codice ExitCode diverso da zero indica un'esecuzione non riuscita.

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

InstanceViewExecutionState: stato dello script Esegui comando dell'utente. Fare riferimento a questo stato per sapere se lo script ha avuto esito positivo o negativo.

ProvisioningState: stato del provisioning dell'estensione generale end-to-end (se la piattaforma di estensione è stata in grado di attivare o meno lo script Esegui comando).

Creare o aggiornare Esegui comando in un computer usando SourceScript (testo script)

Creare o aggiornare Esegui comando in un computer che passa il contenuto dello script direttamente al -SourceScript parametro. Usare ; per separare più comandi.

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

Creare o aggiornare Esegui comando in un computer usando OutputBlobUri, ErrorBlobUri per trasmettere l'output standard e i messaggi di errore standard per l'output e l'errore Append BLOB

Creare o aggiornare Esegui comando in un computer e trasmettere l'output standard e i messaggi di errore standard per l'output e l'errore Append BLOB.

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

Nota

I BLOB di output e di errore devono essere di tipo AppendBlob e gli URL di firma di accesso condiviso devono fornire l'accesso in lettura, accodamento, creazione, scrittura al BLOB. Viene suggerita una scadenza di 24 ore per l'URL della firma di accesso condiviso. Se il BLOB di output o di errore non esiste, verrà creato un BLOB di tipo AppendBlob. Gli URL di firma di accesso condiviso possono essere generati in portale di Azure usando le opzioni del BLOB o il token di firma di accesso condiviso da tramite New-AzStorageBlobSASToken.

Creare o aggiornare Esegui comando in un computer come utente diverso usando i parametri RunAsUser e RunAsPassword

Creare o aggiornare Esegui comando in un computer come utente diverso usando RunAsUser i parametri e RunAsPassword . Affinché RunAs funzioni correttamente, contattare l'amministratore del computer e assicurarsi che l'utente venga aggiunto nel computer, l'utente abbia accesso alle risorse a cui accede il comando Esegui (directory, file, rete e così via) e, in caso di computer Windows, il servizio "Accesso secondario" è in esecuzione nel computer.

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

Creare o aggiornare Esegui comando in una risorsa del computer usando SourceScriptUri (URL della firma di accesso condiviso del BLOB di archiviazione)

Creare o aggiornare Esegui comando in una risorsa computer Windows usando un URL di firma di accesso condiviso di un BLOB di archiviazione che contiene uno script di PowerShell.

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

Nota

L'URL della firma di accesso condiviso deve fornire l'accesso in lettura al BLOB. Per l'URL della firma di accesso condiviso è consigliata una scadenza di 24 ore. Gli URL di firma di accesso condiviso possono essere generati in portale di Azure usando opzioni BLOB o token di firma di accesso condiviso tramite New-AzStorageBlobSASToken. Se si genera un token di firma di accesso condiviso con New-AzStorageBlobSASToken, il formato dell'URL di firma di accesso condiviso è: URL BLOB di base + "?" + token di firma di accesso condiviso da New-AzStorageBlobSASToken.

Creare o aggiornare Esegui comando in un computer usando ScriptLocalPath (file di script locale)

Creare o aggiornare Esegui comando in un computer usando un file di script locale presente nel computer client in cui viene eseguito il cmdlet.

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

Creare o aggiornare Esegui comando in un'istanza del computer usando i parametri Parameter e ProtectedParameter (parametri pubblici e protetti per lo script)

Usare ProtectedParameter per passare qualsiasi input sensibile allo script, ad esempio password, chiavi e così via.

  • Windows: i parametri e ProtectedParameters vengono passati allo script come argomenti e vengono eseguiti come segue: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: i parametri denominati e i relativi valori sono impostati sulla configurazione dell'ambiente, che deve essere accessibile all'interno dello script .sh. Per gli argomenti nameless, passare una stringa vuota per assegnare un nome all'input. Gli argomenti senza nome vengono passati allo script ed eseguiti come segue: myscript.sh publicParam1value publicParam2value secret1value secret2value

Eliminare la risorsa RunCommand dal computer

Rimuovere la risorsa RunCommand distribuita in precedenza nel computer. Se l'esecuzione dello script è ancora in corso, l'esecuzione verrà terminata.

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

Eseguire operazioni di comando

Eseguire il comando nei server abilitati per Azure Arc supporta le operazioni seguenti:

Operazione Descrizione
Crea Operazione per creare un comando di esecuzione. Viene eseguito il comando run.
CANC Operazione per eliminare un comando di esecuzione. Se è in esecuzione, delete arresterà anche il comando run.
GET Operazione per ottenere un comando di esecuzione.
Elenco Operazione per ottenere tutti i comandi di esecuzione di un server abilitato per Azure Arc.
Aggiornamento Operazione per aggiornare il comando run. In questo modo viene arrestato il comando di esecuzione precedente.

Nota

I BLOB di output e di errore vengono sovrascritti ogni volta che viene eseguito lo script di comando di esecuzione.

Scenari di esempio

Si supponga di avere un server abilitato per Azure Arc denominato "2012DatacenterServer1" nel gruppo di risorse "ContosoRG" con ID sottoscrizione "aaaaaaa-aa-aa-aa-aa-aaa". Si consideri uno scenario in cui è necessario fornire l'accesso remoto a un endpoint per i server Windows Server 2012/R2. L'accesso alla sicurezza estesa Aggiornamenti abilitata da Azure Arc richiede l'accesso all'endpoint www.microsoft.com/pkiops/certs. È necessario configurare in remoto una regola del firewall che consenta l'accesso a questo endpoint. Usare Esegui comando per consentire la connettività a questo endpoint.

Esempio 1: Accesso all'endpoint con esegui comando

Iniziare creando uno script Esegui comando per fornire all'endpoint l'accesso all'endpoint nel www.microsoft.com/pkiops/certs server abilitato per Arc di destinazione usando l'operazione PUT.

Per fornire direttamente lo script in linea, usare l'operazione seguente:

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"
  }
}

Per collegare invece al file di script, è possibile usare l'opzione ScriptURI dell'operazione Esegui comando. Per questo si presuppone che sia stato preparato un newnetfirewallrule.ps1 file contenente lo script inline e caricato questo script nell'archivio 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"
  }
}

L'URL della firma di accesso condiviso deve fornire l'accesso in lettura al BLOB. Per l'URL della firma di accesso condiviso è consigliata una scadenza di 24 ore. Gli URL di firma di accesso condiviso possono essere generati in portale di Azure usando le opzioni dei BLOB o il token di firma di accesso condiviso tramite New-AzStorageBlobSASToken. Se si genera un token di firma di accesso condiviso usando New-AzStorageBlobSASToken, il formato dell'URL di firma di accesso condiviso è : base blob URL + "?" + il token di firma di accesso condiviso da New-AzStorageBlobSASToken.

I BLOB di output e di errore devono essere di tipo AppendBlob e gli URL di firma di accesso condiviso devono fornire l'accesso in lettura, accodamento, creazione, scrittura al BLOB. Viene suggerita una scadenza di 24 ore per l'URL della firma di accesso condiviso. Gli URL di firma di accesso condiviso possono essere generati in portale di Azure usando le opzioni del BLOB o il token di firma di accesso condiviso da tramite New-AzStorageBlobSASToken.

Esempio 2: Ottenere i dettagli del comando Di esecuzione

Per verificare di aver eseguito correttamente il provisioning del comando Esegui, usare il comando GET per recuperare i dettagli sul comando Esegui di cui è stato effettuato il provisioning:

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

Esempio 3: Aggiornare il comando Esegui

Si supponga di voler aprire l'accesso a un endpoint *.waconazure.com aggiuntivo per la connettività a Windows Amministrazione Center. È possibile aggiornare il comando Esegui esistente con nuovi parametri:

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"
  }
}

Esempio 4: Elencare i comandi di esecuzione

Prima di eliminare il comando Esegui per l'accesso agli endpoint, assicurarsi che non siano presenti altri comandi di esecuzione per il server abilitato per Arc. È possibile usare il comando list per ottenere tutti i comandi Di esecuzione:

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

Esempio 5: Eliminare un comando Esegui

Se non è più necessaria l'estensione Esegui comando, è possibile eliminarla usando il comando seguente:

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

Disabilitazione del comando Esegui

Per disabilitare il comando Esegui nei server abilitati per Azure Arc, aprire un prompt dei comandi amministrativo ed eseguire i comandi seguenti. Questi comandi usano le funzionalità di configurazione dell'agente locale per l'agente machine Connessione ed nell'elenco di blocchi estensione.

Windows

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

Linux

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