首页 > 解决方案 > 来自 Azure 管道的目标计算机上的 Powershell

问题描述

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

我也尝试了 v2 任务并勾选测试证书并使用我用来 rdp 到机器的管理员帐户,但得到了同样的错误。我想知道我在设置这个时错过了什么?

标签: azureazure-devopsvirtual-machine

解决方案


首先测试您是否可以让 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 并分析流量,大多数情况下这会提示您什么被拒绝以及为什么被拒绝。

希望这可以帮助。


推荐阅读