问题不在于主机文件或构建代理,而在于目标机器上的服务器证书。对我来说,当我遇到问题时,我正在使用 VSTS 部署到Azure VM ,但现场机器的解决方案也保持不变。
对于 Azure VM 部署,当您为公共 IP 创建一个没有DNS 名称标签的 VM ,然后添加一个(类似于example.centralus.cloudapp.azure.com
)时,会出现此问题。如果您更改 DNS 名称标签,也会发生这种情况。
问题
您需要检查您是如何连接到机器的。以前,它使用 Azure VM IP 地址运行良好。现在,VSTS 开始尝试使用,example.centralus.cloudapp.azure.com:5986
因为我最近添加了 DNS 名称标签。我们将其称为目标机器地址。
在目标机器上,以管理员身份打开 PowerShell 或命令提示符,然后输入命令“ winrm e winrm/config/listener
”。它应该返回两个侦听器,一个用于HTTP,另一个用于HTTPS(如果没有为 HTTPS 列出一个,请不要担心,我们稍后会添加一个)。请特别注意HTTPS 侦听器的主机名。如果这与我们之前找到的目标机器地址不匹配,那就是导致错误的原因。CertificateThumbprint对应于机器上的服务器证书。
要查看这些证书,请从 PowerShell 或命令提示符中键入mmc
并按 Enter。转到“文件”>“添加/删除管理单元...”。选择“证书”,然后单击添加。在对话框中,选择“计算机帐户”并单击“下一步”,然后单击“完成” 。在“证书”>“个人”>“证书”下,您将看到 WinRM 配置正在使用的证书。此处自签名的证书被视为测试证书,因为它们不受官方证书颁发机构的支持。我们需要创建一个代表您要使用的目标机器地址的地址。
您还可以在 IIS 中的“服务器证书”下查看证书。
解决方案
确保您知道要用于连接到机器的地址。这是目标机器地址。
在目标计算机上,以管理员身份打开 PowerShell。输入以下命令。
New-SelfSignedCertificate -DnsName WhateverTargetMachineAddressYouNeed -CertStoreLocation Cert:\LocalMachine\My
这将为您的目标地址创建一个有效期为一年的新服务器证书。
接下来,我们要为 HTTPS 传输类型重新创建 WinRM 侦听器以使用新证书。打开 IIS 并查看您的 Web 服务器的服务器证书。你应该看到你刚刚创建的那个。右键单击它并选择“查看...”。在详细信息选项卡中,复制证书的指纹。如果您愿意,也可以从 mmc 执行此操作。
在 PowerShell 中一次输入以下命令。
winrm delete winrm/config/listener?Address=*+Transport=HTTPS
然后:
winrm create winrm/config/listener?Address=*+Transport=HTTPS '@{Hostname="WhateverTargetMachineAddressYouNeed";CertificateThumbprint="TheThumbprintYouCopied";port="5986"}'
完毕! 如果您winrm e winrm/config/listener
在 PowerShell 中输入,您现在应该会看到使用新证书的 HTTPS 传输。
如果您的发布定义或部署脚本中的任何内容使用旧地址(对我来说是 Azure VM IP 地址),请务必更新它们以使用新的目标计算机地址(对我来说是 Azure VM DNS 名称标签)和端口数字。在 VSTS 中,确保选中使用“测试证书”的复选框。祝你好运!
有关更多信息,您可以访问此处:
http://www.dotnetcurry.com/windows-azure/1289/configure-winrm-execute-powershell-remote-azure-with-arm