共用方式為


使用執行命令從遠端安全地設定伺服器 (預覽)

已啟用 Azure Arc 的伺服器上的執行命令 (公開預覽) 會使用 Connected Machine 代理程式,讓您在伺服器內從遠端安全地執行指令碼。 這對於疑難排解、復原、診斷和維護等多種案例均有助益。

支援的環境和設定

  • 體驗:目前支援透過 Azure CLI 和 PowerShell 來使用執行命令。

  • 作業系統:執行命令支援 Windows 和 Linux 作業系統。

  • 環境:執行命令支援非 Azure 環境,包括內部部署、VMware、SCVMM、AWS、GCP 和 OCI。

  • 成本:執行命令是免費的,但在 Azure 中儲存指令碼可能會產生費用。

  • 設定:執行命令無需另行設定或部署任何延伸模組。 Connected Machine 代理程式版本必須是 1.33 或更高版本。

使用 RBAC 限制對執行命令的存取

列出執行命令,或詳細說明需要 Microsoft.HybridCompute/machines/runCommands/read 權限的命令。 內建讀者角色和具有此權限的較高層級。

執行命令需要有 Microsoft.HybridCompute/machines/runCommands/write 權限。 Azure Connected Machine 資源管理員角色和更高層級具有此權限。

您可使用其中一個內建角色或建立自訂角色,以使用 [執行] 命令。

在本機封鎖執行命令

Connected Machine 代理程式支援本機設定,可讓您設定允許清單或封鎖清單。 若要深入了解,請參閱延伸模組允許清單和封鎖清單

若為 Windows:

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

若為 Linux:

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

Azure CLI

下列範例使用 az connectedmachine run-command 在 Azure Windows 機器上執行殼層指令碼。

在 VM 上執行指令碼

此命令會將指令碼傳遞至機器並執行,然後傳回擷取的輸出。

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

列出機器上已部署的所有 RunCommand 資源

此命令會傳回先前部署的執行命令及其屬性的完整清單。

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

取得執行狀態和結果

此命令會擷取目前的執行進度,包括最新的輸出、開始/結束時間、結束代碼,以及執行的終端狀態。

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

注意

instanceView 中的輸出和錯誤欄位限制為最後 4KB。 若要存取完整的輸出和錯誤,您可以在執行「執行命令」時使用 -outputBlobUri-errorBlobUri 參數,將輸出和錯誤資料轉送至儲存體附加 Blob。

從機器刪除 RunCommand 資源

移除先前部署在機器上的 RunCommand 資源。 如果指令碼仍在執行中,則會終止執行。

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

PowerShell

在 VM 上執行指令碼

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

使用 SourceScriptUri 參數在機器上執行指令碼

OutputBlobUriErrorBlobUri 是選擇性參數。

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

列出機器上已部署的所有 RunCommand 資源

此命令會傳回先前部署的執行命令及其屬性的完整清單。

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

取得執行狀態和結果

此命令會擷取目前的執行進度,包括最新的輸出、開始/結束時間、結束代碼,以及執行的終端狀態。

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

使用 SourceScriptUri (儲存體 Blob SAS URL) 在機器上建立或更新「執行命令」

使用包含 PowerShell 指令碼的儲存體 Blob 的 SAS URL,在 Windows 機器上建立或更新「執行命令」。 SourceScriptUri 可以是儲存體 Blob 的完整 SAS URL 或公用 URL。

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

注意

SAS URL 必須提供 Blob 的讀取存取權。 SAS URL 的建議到期時間為 24 小時。 您可以使用 Blob 選項在 Azure 入口網站產生 SAS URL,或使用 New-AzStorageBlobSASToken 產生 SAS 權杖。 如果使用 New-AzStorageBlobSASToken 產生 SAS 權杖,您的 SAS URL 就會是「基底 Blob URL」+ "?" +「New-AzStorageBlobSASToken 中的 SAS 權杖」

在建立或更新「執行命令」後,取得機器的「執行命令」執行個體檢視

透過執行個體檢視取得 VM 的執行命令。 執行個體檢視包含「執行命令」的執行狀態 (成功、失敗等等)、結束代碼、標準輸出,以及使用「執行命令」執行指令碼所產生的標準錯誤。 非零的 ExitCode 表示執行失敗。

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

InstanceViewExecutionState:使用者的「執行命令」指令碼狀態。 參考此狀態可了解您的指令碼是否成功。

ProvisioningState:一般延伸模組佈建端對端的狀態 (延伸模組平台是否能夠觸發「執行命令」指令碼)。

使用 SourceScript (指令碼文字) 在機器上建立或更新「執行命令」

將指令碼內容直接傳遞至 -SourceScript 參數,在機器上建立或更新「執行命令」。 多個命令請以 ; 分隔。

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

使用 OutputBlobUri、ErrorBlobUri 在機器上建立或更新「執行命令」,以將標準輸出和標準錯誤訊息串流至輸出與錯誤附加 Blob

在機器上建立或更新「執行命令」,並將標準輸出和標準錯誤訊息串流至輸出與錯誤附加 Blob。

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

注意

輸出和錯誤 Blob 必須是 AppendBlob 類型,且其 SAS URL 必須提供 Blob 的讀取、附加、建立、寫入存取權。 SAS URL 的建議到期時間為 24 小時。 如果輸出或錯誤 Blob 不存在,則會建立 AppendBlob 類型的 Blob。 您可以使用 Blob 選項在 Azure 入口網站產生 SAS URL,或使用 New-AzStorageBlobSASToken 產生 SAS 權杖。

使用 RunAsUser 和 RunAsPassword 參數,以不同使用者身分在機器上建立或更新「執行命令」

使用 RunAsUserRunAsPassword 參數,以不同使用者身分在機器上建立或更新「執行命令」。 若要讓 RunAs 正常運作,請連絡機器的管理員,並確定已在機器上新增使用者、使用者有權存取「執行命令」所存取的資源 (目錄、檔案、網路等等),且若是使用 Windows 機器,也需確認機器上正在執行「次要登入」服務。

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

使用 SourceScriptUri (儲存體 Blob SAS URL) 在機器資源上建立或更新「執行命令」

使用包含 PowerShell 指令碼的儲存體 Blob 的 SAS URL,在 Windows 機器資源上建立或更新「執行命令」。

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

注意

SAS URL 必須提供 Blob 的讀取存取權。 SAS URL 的建議到期時間為 24 小時。 您可以使用 Blob 選項在 Azure 入口網站產生 SAS URL,或使用 New-AzStorageBlobSASToken 產生 SAS 權杖。 如果使用 New-AzStorageBlobSASToken 產生 SAS 權杖,SAS URL 格式就會是:基底 Blob URL + "?" + New-AzStorageBlobSASToken 中的 SAS 權杖。

使用 ScriptLocalPath (本機指令檔),在機器上建立或更新「執行命令」

在執行 Cmdlet 的用戶端電腦上使用本機指令檔,在機器上建立或更新「執行命令」。

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

使用 Parameter 和 ProtectedParameter 參數 (指令碼的公用和受保護參數),在機器執行個體上建立或更新「執行命令」

使用 ProtectedParameter 將任何敏感性輸入 (例如密碼、金鑰等) 傳遞至指令碼。

  • Windows:Parameter 和 ProtectedParameter 會傳遞至指令碼,因為引數會傳遞至指令碼並執行如下:myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux:具名參數及其值會設為環境設定,且應可從 .sh 指令碼中存取。 針對沒有名稱的引數,則會將空字串傳遞至名稱輸入。 沒有名稱的引數會傳遞至指令碼並執行如下:myscript.sh publicParam1value publicParam2value secret1value secret2value

從機器刪除 RunCommand 資源

移除先前部署在機器上的 RunCommand 資源。 如果指令碼仍在執行中,則會終止執行。

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

執行命令作業

已啟用 Azure Arc 的伺服器上的執行命令支援下列作業:

作業 描述
建立 建立執行命令的作業。 這會執行「執行命令」。
刪除 刪除執行命令的作業。 刪除執行時,也會停止執行命令。
取得 Yammer 取得執行命令的作業。
清單​​ 取得已啟用 Azure Arc 的伺服器所有執行命令的作業。
更新 更新執行命令的作業。 這會停止先前的執行命令。

注意

每當執行命令指令碼執行時,都會覆寫輸出和錯誤 Blob。

範例案例

假設您在訂用帳戶識別碼為 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" 的資源群組 "ContosoRG" 中有一個已啟用 Azure Arc 的伺服器,名為 "2012DatacenterServer1"。 假設您需要提供對 Windows Server 2012/R2 伺服器端點的遠端存取權。 要存取由 Azure Arc 啟用的延伸安全性更新,必須存取端點 www.microsoft.com/pkiops/certs。 您必須從遠端設定允許存取此端點的防火牆規則。 請使用執行命令,允許連線至此端點。

範例 1:使用執行命令進行端點存取

首先,使用 PUT 作業建立提供端點存取的執行命令指令碼,以存取已啟用 Arc 的目標伺服器上的 www.microsoft.com/pkiops/certs 端點。

若要直接提供內嵌指令碼,請使用下列作業:

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

若要改為連結至指令檔,您可以使用「執行命令」作業的 ScriptURI 選項。 針對這一點,假設您已備妥包含內嵌指令碼的 newnetfirewallrule.ps1 檔案,並將此指令碼上傳至 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"
  }
}

SAS URL 必須提供 Blob 的讀取存取權。 SAS URL 的建議到期時間為 24 小時。 您可以使用 Blob 選項在 Azure 入口網站產生 SAS URL,或使用 New-AzStorageBlobSASToken 產生 SAS 權杖。 如果使用 New-AzStorageBlobSASToken 產生 SAS 權杖,SAS URL 格式就會是:base blob URL + "?" + New-AzStorageBlobSASToken 中的 SAS 權杖。

輸出和錯誤 Blob 必須是 AppendBlob 類型,且其 SAS URL 必須提供 Blob 的讀取、附加、建立、寫入存取權。 SAS URL 的建議到期時間為 24 小時。 您可以使用 Blob 選項在 Azure 入口網站產生 SAS URL,或使用 New-AzStorageBlobSASToken 產生 SAS 權杖。

範例 2:取得執行命令詳細資料

若要確認您已正確佈建執行命令,請使用 GET 命令擷取已佈建的執行命令的詳細資料:

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

範例 3:更新執行命令

假設您想要開放對其他端點 *.waconazure.com 的存取以連線至 Windows Admin Center。 您可以使用新參數來更新現有的執行命令:

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

範例 4:列出執行命令

在刪除端點存取的執行命令之前,請確定已啟用 Arc 的伺服器沒有其他執行命令。 您可以使用列出命令來取得所有執行命令:

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

範例 5:刪除執行命令

如果您不再需要「執行命令」延伸模組,可以使用下列命令加以刪除:

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

停用執行命令

若要在已啟用 Azure Arc 的伺服器上停用執行命令,請開啟系統管理命令提示字元,並執行下列命令。 這些命令會對延伸模組封鎖清單中的 Connected Machine 代理程式使用本機代理程式設定功能。

Windows

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

Linux

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