簡體   English   中英

Powershell 來自 azure 管道的目標計算機

[英]Powershell on target machines from azure pipelines

我有一個 Azure VM,我想從 azure 管道遠程運行一些 powershell 命令。 我使用自簽名證書在我的 VM 上設置 winrm,並在 VM azure 防火牆上打開端口 5986。 我已經能夠從本地機器遠程執行我放入 VM 的一些腳本,但是當我從 Powershell 對目標機器任務執行相同的腳本時,我會收到拒絕訪問錯誤。

我也嘗試了 v2 任務並勾選測試證書並使用我用來 rdp 到機器的管理員帳戶,但得到了同樣的錯誤。 我想知道我在設置這個時錯過了什么?

首先測試您可以讓 Powershell 從筆記本電腦或其他機器在您的目標上遠程執行。

使用下面的 Powershell 腳本來測試您的 WinRM 連接和自簽名證書,並注意測試 Powershell 腳本中的 -SkipCNCheck -SkipCACheck PSSession 選項。 如果您使用自簽名證書,這些選項是必不可少的,並且您還需要在“在目標機器上運行 Powershell”模板(版本 3)的“會話選項”中提供相同的開關。

設置會話開關以告訴 WinRM 忽略證書 CA/CN 檢查

注意:我僅使用本地主機 IP 作為示例,以免意外使用真實 IP

$password = ConvertTo-SecureString 'password goes here' -AsPlainText -Force

$credential = New-Object System.Management.Automation.PSCredential ('yourDomain\yourDomainUserId', $password)

$sessionOptions = New-PSSessionOption -SkipCNCheck -SkipCACheck

$remote_session = new-pssession -computername 127.0.0.1 -UseSSL -credential $credential -SessionOption $sessionOptions

Invoke-Command -session $remote_session -ScriptBlock { Get-Culture }

還要確保您已設置 WinRM 偵聽器以偵聽目標計算機的外部IP,並使用該偵聽器注冊自簽名證書指紋。 使用 WinRM 命令執行此操作(使用您的實際外部公共 IP),例如:

winrm create winrm/config/Listener?Address=IP:127.0.0.1+Transport=HTTPS @{Hostname="some.hostname.outhere.net"; CertificateThumbprint="[YOUR CERT THUMBPRINT]ABCDEF0247283798137030174027"}

還要注意的是,在“在目標機器上運行 Powershell”模板的“機器”字段中,使用機器外部公共 IP 代替 FQDN 或 DNS 名稱。 如果您使用的是自簽名證書,則必須執行此操作。

一旦您獲得測試 Powershell 腳本以使用來自遠程機器的自簽名證書進行連接和握手,您幾乎可以保證“在目標機器上運行 Powershell”也能成功。

其他檢查事項:

  • 確保您已使用通配符“*”作為服務器名稱或 IP 設置 TrustedHosts。 在基本連接正常工作后,您可以返回並微調您的安全性。

  • 您可能需要域級 GPO 以允許 WinRM 服務不受阻礙地運行,具體取決於您的目標計算機是工作站還是加入域的計算機。

如果所有其他方法都失敗了,請在您的目標機器上下載並安裝 Wireshark 並設置一個 ip 過濾器以僅偵聽客戶端服務器的 ip 並分析流量,大多數情況下這將提示您了解被拒絕的內容以及原因。

希望這可以幫助。

為 Microsoft Azure 虛擬機設置 WinRM。

Azure 虛擬機需要 WinRM 才能使用 HTTPS 協議。 您可以使用自簽名測試證書。 在這種情況下,自動化代理將不會驗證由受信任的證書頒發機構頒發的證書的真實性。

根據您的描述,如果您能夠使用管理員帳戶 rdp 到機器。

構建服務帳戶只是在管道的目標機器上運行 Powershell 任務。 建議您還可以使用您的構建服務帳戶來遠程您的 Azure VM 並運行該腳本。 這將縮小問題的范圍。

如果構建服務帳戶也出現訪問拒絕錯誤。 您需要為構建服務帳戶分配相應的權限,請參閱您的管理員帳戶。

此外,如果您的 Azure VM 沒有公共 IP,請在此處參考這個類似的問題: 在 Azure 中使用沒有公共 IP 的 VSTS 任務“目標機器上的 PowerShell”

在此處輸入圖片說明

如果 .Netcore 在您的 VM 上,這可能對您沒有幫助,但我們通過創建具有 http 請求功能的輕型 .Netcore Worker 服務來解決無法使用提升的 Powershell 命令的問題。 您可以從常規 Powershell YML 任務發送Invoke-RestMethod命令,它將在 ASP 控制器的另一端觸發您的自定義邏輯。 在為我們的單元測試重新安裝之前,我們使用它來刪除 Appx 包。 存儲庫位於AzureAdmin

azure 管道也有類似的問題。 結果表明 PowerShell 上下文要求用戶名是完全限定名(域\用戶名或機器名\用戶名)。

一旦我們使用完全限定的名稱格式,我們就能夠通過管道中的 powershell 成功連接到遠程機器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM