我有一个Azure VM,我想从azure管道远程运行一些powershell命令。我使用自签名证书在VM上设置winrm,并在VM Azure防火墙上打开端口5986。我已经能够从本地计算机上远程执行我放置在VM中的某些脚本,但是当我在目标计算机上的任务中从Powershell执行这些脚本时,会出现“访问被拒绝”错误。
我也尝试了v2任务,并勾选了测试证书,并使用了我用来rdp到该计算机的管理员帐户,但遇到了相同的错误。我想知道我在设置此功能时错过了什么吗?
答案 0 :(得分:1)
首次测试,您可以使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并分析流量,在大多数情况下,这会帮助您了解被拒绝的内容以及为什么。
希望这会有所帮助。
答案 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
答案 2 :(得分:0)
如果 .Netcore 在您的 VM 上,这可能对您没有帮助,但我们通过创建具有 http 请求功能的轻型 .Netcore Worker 服务来解决无法使用提升的 Powershell 命令的问题。您可以从常规 Powershell YML 任务发送 Invoke-RestMethod 命令,它会在 ASP 控制器的另一端触发您的自定义逻辑。在为我们的单元测试重新安装之前,我们使用它来删除 Appx 包。存储库位于 AzureAdmin