Share via


Mit der Skriptausführung Server remote und sicher konfigurieren (Preview)

Die Skriptausführung auf Servern mit Azure Arc-Unterstützung (Public Preview) verwendet den Agenten Connected Machine, damit Sie ein Skript remote und sicher innerhalb Ihrer Server ausführen können. Dies kann für unzählige Szenarien in den Bereichen Problembehandlung, Wiederherstellung, Diagnose und Wartung hilfreich sein.

Unterstützte Umgebung und Konfiguration

  • Erfahrungen: Die Skriptausführung wird derzeit über Azure CLI und PowerShell unterstützt.

  • Betriebssysteme: Die Skriptausführung unterstützt sowohl Windows- als auch Linux-Betriebssysteme.

  • Umgebungen: Die Skriptausführung unterstützt Nicht-Azure-Umgebungen wie lokale, VMware, SCVMM, AWS, GCP und OCI.

  • Kosten: Die Skriptausführung ist kostenlos, die Speicherung von Skripts in Azure kann jedoch Kosten verursachen.

  • Konfiguration: Die Skriptausführung erfordert keine weitere Konfiguration oder die Bereitstellung von Erweiterungen. Der Connected Machine-Agent muss mindestens Version 1.33 haben.

Einschränken des Zugriffs auf Skriptausführungen mithilfe von RBAC

Zum Auflisten der Skriptausführungen oder Anzeigen der Details zu einem Befehl ist die Berechtigung Microsoft.HybridCompute/machines/runCommands/read erforderlich. Die integrierte Rolle Leser und höhere Rollen verfügen über diese Berechtigung.

Zum Ausführen eines Befehls ist die Berechtigung Microsoft.HybridCompute/machines/runCommands/write erforderlich. Über diese Berechtigung verfügen die Rolle Ressourcenadministrator für Azure Connected Machine und höhere Rollen.

Für die Skriptausführung können Sie eine der integrierten Rollen verwenden oder eine benutzerdefinierte Rolle erstellen.

Lokales Blockieren von Skriptausführungen

Der Connected Machine-Agent unterstützt lokale Konfigurationen, mit denen Sie eine Positivliste oder eine Sperrliste festlegen können. Weitere Informationen finden Sie unter Positivlisten und Sperrlisten für Erweiterungen.

Windows:

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

Linux:

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

Azure CLI

In den folgenden Beispielen wird der Befehl az connectedmachine run-command verwendet, um ein Shellskript auf einem Windows-Computer in Azure auszuführen.

Ausführen eines Skripts mit dem Computer

Dieser Befehl übergibt das Skript an den Computer, führt es aus und gibt die erfasste Ausgabe zurück.

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

Auflisten aller bereitgestellten RunCommand-Ressourcen auf einem Computer

Mit diesem Befehl rufen Sie eine vollständige Liste der zuvor bereitgestellten Skriptausführungen mit ihren Eigenschaften ab.

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

Abrufen des Ausführungsstatus und der Ergebnisse

Dieser Befehl ruft den aktuellen Ausführungsfortschritt ab, einschließlich der letzten Ausgabe, der Start-/Endzeit, des Exitcodes und des Beendigungsstatus der Ausführung.

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

Hinweis

Ausgabe- und Fehlerfelder in instanceView sind auf die letzten 4 KB beschränkt. Um auf die vollständige Ausgabe und den vollständigen Fehler zuzugreifen, können Sie die Ausgabe- und Fehlerdaten beim Ausführen der Skriptausführung an Anfügeblobs im Speicher weiterleiten, indem Sie Blobs mit den Parametern -outputBlobUri und -errorBlobUri verwenden.

Löschen von RunCommand-Ressourcen vom Computer

Entfernen Sie die zuvor auf dem Computer bereitgestellte RunCommand-Ressource. Wenn die Skriptausführung aktuell noch stattfindet, wird die Ausführung beendet.

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

PowerShell

Ausführen eines Skripts mit dem Computer

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

Ausführen eines Skripts auf dem Computer mithilfe des SourceScriptUri-Parameters

OutputBlobUri und ErrorBlobUri sind optionale Parameter.

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

Auflisten aller bereitgestellten RunCommand-Ressourcen auf einem Computer

Mit diesem Befehl rufen Sie eine vollständige Liste der zuvor bereitgestellten Skriptausführungen mit ihren Eigenschaften ab.

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

Abrufen des Ausführungsstatus und der Ergebnisse

Dieser Befehl ruft den aktuellen Ausführungsfortschritt ab, einschließlich der letzten Ausgabe, der Start-/Endzeit, des Exitcodes und des Beendigungsstatus der Ausführung.

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

Erstellen oder Aktualisieren der Skriptausführung auf einem Computer mithilfe von SourceScriptUri (SAS-URL des Speicherblobs)

Erstellen oder aktualisieren Sie die Skriptausführung auf einem Windows-Computer mithilfe der SAS-URL eines Speicherblobs, das ein PowerShell-Skript enthält. SourceScriptUri kann die vollständige SAS-URL oder öffentliche URL eines Speicherblobs sein.

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

Hinweis

Die SAS-URL muss Lesezugriff auf das Blob bieten. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von New-AzStorageBlobSASToken generiert werden. Wenn Sie SAS-Token mithilfe von New-AzStorageBlobSASToken generieren, lautet das Format der SAS-URL „Basisblob-URL“ + „SAS-Token aus New-AzStorageBlobSASToken“.

Abrufen der Instanzansicht der Skriptausführung für einen Computer nach dem Erstellen oder Aktualisieren der Skriptausführung

Rufen Sie die Skriptausführung für einen Computer mit Instanzansicht auf. Die Instanzansicht enthält den Ausführungsstatus der Skriptausführung (Erfolgreich, Fehler usw.), den Exitcode, die Standardausgabe und den Standardfehler, der durch Ausführen des Skripts mithilfe der Skriptausführung erzeugt wird. Ein Exitcode ungleich Null kennzeichnet eine fehlgeschlagene Ausführung.

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

InstanceViewExecutionState: Status des Skriptausführung-Skripts des Benutzers. Dieser Status gibt an, ob die Ausführung des Skripts erfolgreich war.

ProvisioningState: Status der gesamten Erweiterungsbereitstellung (unabhängig davon, ob die Erweiterungsplattform das Skriptausführungsskript auslösen konnte)

Erstellen oder Aktualisieren der Skriptausführung auf einem Computer mithilfe von SourceScript (Skripttext)

Erstellen oder aktualisieren Sie die Skriptausführung auf einem Computer, der den Skriptinhalt direkt an den -SourceScript-Parameter übergibt. Verwenden Sie ;, um mehrere Befehle zu trennen.

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

Erstellen oder Aktualisieren der Skriptausführung auf einem Computer mithilfe von OutputBlobUri und ErrorBlobUri, um Standardausgaben und Standardfehlermeldungen an Ausgabe- und Fehleranfügeblobs zu streamen

Erstellen oder aktualisieren Sie die Skriptausführung auf einem Computer, und streamen Sie Standardausgabe und Standardfehlermeldungen an Ausgabe- und Fehleranfügeblobs.

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

Hinweis

Ausgabe- und Fehlerblobs müssen vom Typ „AppendBlob“ sein, und ihre SAS-URLs müssen Lese-, Anfüge-, Erstellungs- und Schreibzugriff auf das Blob bieten. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. Wenn kein Ausgabe- oder Fehlerblob vorhanden ist, wird ein Blob vom Typ „AppendBlob“ erstellt. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von New-AzStorageBlobSASToken generiert werden.

Erstellen oder Aktualisieren von Skriptausführung auf einem Computer als anderer Benutzer oder andere Benutzerin mithilfe der Parameter „RunAsUser“ und „RunAsPassword“

Erstellen oder aktualisieren Sie Skriptausführung mithilfe der Parameter RunAsUser und RunAsPassword als anderer Benutzer oder andere Benutzerin auf einem Computer. Damit RunAs ordnungsgemäß funktioniert, wenden Sie sich an den Administrator oder die Administratorin des Computers, und stellen Sie sicher, dass der Benutzer oder die Benutzerin auf dem Computer hinzugefügt wurde und Zugriff auf Ressourcen hat, auf die die Skriptausführung zugreift (Verzeichnisse, Dateien, Netzwerk usw.). Vergewissern Sie sich außerdem, dass im Fall eines Windows-Computers der Dienst „Sekundäre Anmeldung“ auf dem Computer ausgeführt wird.

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

Erstellen oder Aktualisieren der Skriptausführung auf einer Computerressource mithilfe von SourceScriptUri (SAS-URL des Speicherblobs)

Erstellen oder aktualisieren Sie die Skriptausführung auf einer Windows-Computerressource mithilfe der SAS-URL eines Speicherblobs, das ein PowerShell-Skript enthält.

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

Hinweis

Die SAS-URL muss Lesezugriff auf das Blob bieten. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von New-AzStorageBlobSASToken generiert werden. Wenn Sie SAS-Token mithilfe von New-AzStorageBlobSASToken generieren, lautet das Format der SAS-URL „Basisblob-URL“ + „SAS-Token aus New-AzStorageBlobSASToken“.

Erstellen oder Aktualisieren von Skriptausführung auf einem Computer mithilfe von ScriptLocalPath (lokale Skriptdatei)

Erstellen oder aktualisieren Sie die Skriptausführung auf einem Computer mithilfe einer lokalen Skriptdatei, die sich auf dem Clientcomputer befindet, auf dem das Cmdlet ausgeführt wird.

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

Erstellen oder Aktualisieren der Skriptausführung auf einer Computerinstanz mithilfe der Parameter „Parameter“ und „ProtectedParameter“ (öffentliche und geschützte Parameter im Skript)

Verwenden Sie „ProtectedParameter“, um alle vertraulichen Eingaben (z. B. Kennwörter, Schlüssel usw.) an Skripts zu übergeben.

  • Windows: Die Parameter „Parameters“ und „ProtectedParameters“ werden an das Skript übergeben, wenn Argumente an das Skript übergeben und wie folgt ausgeführt werden: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: Benannte Parameter und ihre Werte werden auf die Umgebungskonfiguration festgelegt, die innerhalb des .sh-Skripts zugänglich sein sollte. Übergeben Sie für namenlose Argumente eine leere Zeichenfolge an die Eingabe. Namenlose Argumente werden an das Skript übergeben und wie folgt ausgeführt: myscript.sh publicParam1value publicParam2value secret1value secret2value

Löschen von RunCommand-Ressourcen vom Computer

Entfernen Sie die zuvor auf dem Computer bereitgestellte RunCommand-Ressource. Wenn die Skriptausführung aktuell noch stattfindet, wird die Ausführung beendet.

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

Vorgänge der Skriptausführung

Die Skriptausführung unterstützt für Server mit Azure Arc-Unterstützung die folgenden Vorgänge:

Vorgang Beschreibung
Erstellen Der Vorgang zum Erstellen einer Skriptausführung. Dadurch wird die Skriptausführung ausgeführt.
Delete Der Vorgang zum Löschen einer Skriptausführung. Wenn dieser ausgeführt wird, wird die Skriptausführung ebenfalls beendet.
Get Der Vorgang zum Abrufen einer Skriptausführung.
Liste Der Vorgang zum Abrufen aller Skriptausführungen eines Servers mit Azure Arc-Unterstützung.
Aktualisieren Der Vorgang zum Aktualisieren der Skriptausführung. Dadurch wird die vorherige Skriptausführung beendet.

Hinweis

Ausgabe- und Fehlerblobs werden bei jeder Ausführung des Befehlsskripts überschrieben.

Beispielszenarien

Angenommen, Sie haben einen Server mit Azure Arc-Unterstützung mit dem Namen „2012DatacenterServer1“ in der Ressourcengruppe „ContosoRG“ mit Abonnement-ID „aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa“. Denken Sie an ein Szenario, in dem Sie Remotezugriff auf einen Endpunkt für Windows Server 2012/R2-Server bereitstellen müssen. Der Zugriff auf die von Azure Arc aktivierten erweiterten Sicherheitsupdates erfordert den Zugriff auf den Endpunkt www.microsoft.com/pkiops/certs. Sie müssen remote eine Firewallregel konfigurieren, die den Zugriff auf diesen Endpunkt ermöglicht. Verwenden Sie die Skriptausführung, um die Verbindung mit diesem Endpunkt zuzulassen.

Beispiel 1: Endpunktzugriff mit Skriptausführung

Beginnen Sie, indem Sie ein Skript für die Skriptausführung erstellen, um mithilfe des PUT-Vorgangs Endpunktzugriff auf den Endpunkt www.microsoft.com/pkiops/certs auf Ihrem Zielserver mit Arc-Unterstützung bereitzustellen.

Um das Skript direkt inline bereitzustellen, verwenden Sie den folgenden Vorgang:

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

Um stattdessen auf die Skriptdatei zu verweisen, können Sie die Option ScriptURI des Skriptausführungsvorgangs verwenden. Voraussetzung dafür ist, dass Sie eine Datei newnetfirewallrule.ps1 mit dem Inline-Skript vorbereitet und dieses Skript in den Blob-Speicher hochgeladen haben.

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

Die SAS-URL muss Lesezugriff auf das Blob bieten. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. SAS-URLs können über das Azure-Portal mithilfe von Blobs-Optionen oder SAS-Token mithilfe von New-AzStorageBlobSASToken generiert werden. Wenn Sie das SAS-Token mit New-AzStorageBlobSASToken erzeugen, lautet das SAS-URL-Format: base blob URL + "?" + das SAS-Token von New-AzStorageBlobSASToken.

Ausgabe- und Fehlerblobs müssen vom Typ „AppendBlob“ sein, und ihre SAS-URLs müssen Lese-, Anfüge-, Erstellungs- und Schreibzugriff auf das Blob bieten. Für die SAS-URL wird eine Ablaufzeit von 24 Stunden vorgeschlagen. SAS-URLs können im Azure-Portal über die Bloboptionen oder mit dem SAS-Token unter Verwendung von New-AzStorageBlobSASToken generiert werden.

Beispiel 2: Skriptausführungsdetails abrufen

Um zu überprüfen, ob Sie die Skriptausführung korrekt bereitgestellt haben, verwenden Sie den GET-Befehl, um Details über die bereitgestellte Skriptausführung abzurufen:

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

Beispiel 3: Aktualisieren der Skriptausführung

Nehmen wir an, Sie möchten den Zugriff auf einen zusätzlichen Endpunkt *.waconazure.com für die Verbindung zum Windows Admin Center öffnen. Sie können die bestehende Skriptausführung mit neuen Parametern aktualisieren:

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

Beispiel 4: Skriptausführungen auflisten

Bevor Sie die Skriptausführung für den Endpunktzugriff löschen, vergewissern Sie sich, dass es für den Server mit Arc-Unterstützung keine anderen Skriptausführungen gibt. Sie können den Befehl list verwenden, um alle Skriptausführungen aufzulisten:

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

Beispiel 5: Löschen einer Skriptausführung

Wenn Sie die Skriptausführungserweiterung nicht mehr benötigen, können Sie sie mit dem folgenden Befehl löschen:

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

Deaktivieren des Befehls „Ausführen“

Um den Befehl „Ausführen“ auf Azure Arc-fähigen Servern zu deaktivieren, öffnen Sie eine administrative Eingabeaufforderung, und führen Sie die folgenden Befehle aus. Diese Befehle verwenden die Konfigurationsfunktionen des lokalen Agents für den Agent für den verbundenen Computer in der Erweiterungsblockliste.

Windows

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

Linux

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