Share via


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

在已啟用 Azure Arc 的伺服器上執行命令(公開預覽版)會使用 連線 機器代理程式,讓您從遠端且安全地在伺服器內執行腳本。 這適用於疑難解答、復原、診斷和維護的無數案例。

支援的環境和組態

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

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

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

  • 成本: 執行命令是免費的,不過 Azure 中的腳本記憶體可能會產生計費。

  • 組態: 執行命令不需要更多設定或部署任何擴充功能。 連線 的電腦代理程式版本必須是 1.33 或更高版本。

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

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

執行命令需要有 Microsoft.HybridCompute/machines/runCommands/write 權限。 Azure 連線 Machine Resource 管理員 istrator 角色和更高層級具有此許可權。

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

封鎖在本機執行命令

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

若為 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 計算機上執行殼層腳本。

使用電腦執行腳本

此命令會將腳本傳遞給計算機、執行腳本,並傳回擷取的輸出。

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

使用電腦執行腳本

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,或使用 來產生 SAS 令牌New-AzStorageBlobSASToken。 如果使用 產生 SAS 令牌 New-AzStorageBlobSASToken,則您的 SAS URL = “base blob URL” + “?” + “SAS Token from New-AzStorageBlobSASToken

建立或更新執行命令之後,取得計算機的執行命令實例檢視

取得具有實例檢視的電腦執行命令。 實例檢視包含執行命令的執行狀態(成功、失敗等)、結束代碼、標準輸出,以及使用執行命令執行腳本所產生的標準錯誤。 非零的 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 的選項,或使用 New-AzStorageBlobSASToken的 SAS 令牌,在 Azure 入口網站 上產生 SAS URL。

使用 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 選項或使用 New-AzStorageBlobSASToken的 SAS 令牌,在 Azure 入口網站 上產生 SAS URL。 如果使用 產生 SAS 令牌 New-AzStorageBlobSASToken,則 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:參數和 ProtectedParameters 會傳遞至腳本,因為自變數會傳遞至腳本並執行如下: 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 的伺服器上執行命令支援下列作業:

作業 描述
建立 建立執行命令的作業。 這會執行 run 命令。
刪除 要刪除執行命令的作業。 如果它正在執行,刪除也會停止執行命令。
Get 取得執行命令的作業。
清單​​ 取得已啟用 Azure Arc 之伺服器之所有執行命令的作業。
更新 更新執行命令的作業。 這會停止先前的執行命令。

注意

每次執行命令文本時,都會覆寫輸出和錯誤 Blob。

範例案例

假設您在資源群組 「ContosoRG」 中有一個名為 “2012DatacenterServer1” 且訂用帳戶標識碼為 “aaaa-aaaa” 的已啟用 Azure Arc 的伺服器。 假設您需要為 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 選項或使用 的 SAS 令牌New-AzStorageBlobSASToken,在 Azure 入口網站 上產生 SAS URL。 如果使用 產生 SAS 令牌 New-AzStorageBlobSASToken,則 SAS URL 格式為: base blob URL + "?" + 來自 New-AzStorageBlobSASToken的 SAS 令牌。

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

範例 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 管理員 中心。 您可以使用新的參數來更新現有的執行命令:

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 命令來取得所有執行命令:

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 的伺服器上停用執行命令,請開啟系統管理命令提示字元並執行下列命令。 這些命令會針對擴充功能封鎖清單中 連線 的計算機代理程式使用本機代理程式組態功能。

Windows

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

Linux

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