使用執行命令從遠端且安全地設定伺服器 (預覽)
在已啟用 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 參數在機器上執行腳本
OutputBlobUri
和 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>”
列出電腦上所有已部署的 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 參數,以不同使用者身分在電腦上建立或更新執行命令
使用 RunAsUser
和 RunAsPassword
參數,以不同使用者身分在計算機上建立或更新執行命令。 若要讓 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"