在azure管道的目标机器上使用Powershell

6 人关注

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

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

1 个评论
你的Azure虚拟机是否有公共IP?
azure
azure-devops
virtual-machine
DavidBL
DavidBL
发布于 2019-07-16
3 个回答
Vance McCorkle
Vance McCorkle
发布于 2021-02-13
0 人赞同

首先测试你是否能让Powershell从笔记本电脑或其他机器上远程执行你的目标。

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

注意 :我只用了一个本地主机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,并分析流量,大多数情况下,这将提示你什么被拒绝以及为什么。

    希望这有帮助。

    PatrickLu-MSFT
    PatrickLu-MSFT
    发布于 2021-02-13
    0 人赞同

    要为微软Azure虚拟机设置WinRM。

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

    根据你的描述,如果你能够使用管理员账户来rdp到机器上。

    构建服务账户 只是在你的管道的目标机器上运行Powershell任务。建议你也可以用你的构建服务账户来远程访问你的Azure VM并运行脚本。这将缩小问题的范围。

    如果构建服务账户也出现了拒绝访问的错误。你需要为构建服务账户的管理账户分配相应的权限。