来自天蓝色管道的目标计算机上的Powershell

时间:2019-07-16 02:38:31

标签: azure azure-devops virtual-machine

我有一个Azure VM,我想从azure管道远程运行一些powershell命令。我使用自签名证书在VM上设置winrm,并在VM Azure防火墙上打开端口5986。我已经能够从本地计算机上远程执行我放置在VM中的某些脚本,但是当我在目标计算机上的任务中从Powershell执行这些脚本时,会出现“访问被拒绝”错误。

我也尝试了v2任务,并勾选了测试证书,并使用了我用来rdp到该计算机的管理员帐户,但遇到了相同的错误。我想知道我在设置此功能时错过了什么吗?

3 个答案:

答案 0 :(得分:1)

首次测试,您可以使Powershell从便携式计算机或其他计算机上在目标上远程执行。

使用下面的Powershell脚本测试WinRM连接和自签名证书,并注意测试Powershell脚本中的-SkipCNCheck -SkipCACheck PSSession选项。如果您使用的是自签名证书,则这些选项必不可少,并且还需要在“在目标计算机上运行Powershell”模板(版本3)的“会话选项”中提供相同的开关。

Set session switches to tell WinRM to ignore the cert CA/CN check

注意:我仅以本地主机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并分析流量,在大多数情况下,这会帮助您了解被拒绝的内容以及为什么。

希望这会有所帮助。

答案 1 :(得分:0)

为Microsoft Azure虚拟机设置WinRM。

  

Azure虚拟机要求WinRM使用HTTPS协议。您   可以使用自签名的测试证书。在这种情况下,自动化   代理将不会验证证书的真实性   由受信任的证书颁发机构颁发。

根据您的描述,如果您能够使用管理员帐户rdp到计算机。

构建服务帐户仅在管道的目标计算机任务上运行Powershell。建议您还可以使用构建服务帐户来远程运行Azure VM并运行脚本。这将缩小问题范围。

如果构建服务帐户也出现“拒绝访问”错误。您需要分配相应的权限,以参考构建服务帐户的管理员帐户。

此外,如果您的Azure VM没有公用IP,请在此处参考以下类似问题:Use VSTS task 'PowerShell on Target Machines' without public IP in Azure

enter image description here

答案 2 :(得分:0)

如果 .Netcore 在您的 VM 上,这可能对您没有帮助,但我们通过创建具有 http 请求功能的轻型 .Netcore Worker 服务来解决无法使用提升的 Powershell 命令的问题。您可以从常规 Powershell YML 任务发送 Invoke-RestMethod 命令,它会在 ASP 控制器的另一端触发您的自定义逻辑。在为我们的单元测试重新安装之前,我们使用它来删除 Appx 包。存储库位于 AzureAdmin