首页 > 解决方案 > 我收到 WinRM 超时错误。请有人可以解释我的脚本有什么问题吗?

问题描述

我正在尝试构建一个针对 PowerShell 脚本引导的 Windows AMI,但我不断收到 WinRM 的超时错误。

我也尝试过将通信器切换到 SSH,但没有成功,所以我回到了 WinRM,因为将它用于我想要实现的目标更有意义。

这是我的 Packer JSON 脚本:

{
  "builders": [
    {
      "access_key": "XXXXXXXXXXX",
      "secret_key": "XXXXXXXXXXXXXXXXX",
      "ami_name": "WINCIS-Hardened-{{timestamp}}",
      "instance_type": "t2.micro",
      "type": "amazon-ebs",
      "source_ami": "ami-016ed249dc46e6b40",
      "associate_public_ip_address":"True",
      "communicator": "winrm",
      "winrm_username": "Administrator",
      "winrm_port": "5986",
      "winrm_timeout": "15m",
      "winrm_use_ssl" :"true",
      "winrm_insecure": "true",
      "region": "eu-west-2",
      "vpc_id": "vpc-XXXXXXXXXXXXX",
      "subnet_id": "subnet-XXXXXXXXXXXXXX"
    }
  ],
  "provisioners": [
    {
      "type": "powershell",
      "execute_command": "powershell -executionpolicy bypass \"& { if (Test-Path variable:global:ProgressPreference='SilentlyContinue'};. '{{.Path}}'; exit \\$LastExitCode }\"",
      "script": "./wincis_hardened.ps1"
    }
  ]
}

这是我得到的错误:

$ packer build wincis_hardened_aws.json
amazon-ebs 输出将采用这种颜色。

==> amazon-ebs:预验证 AMI 名称:WINCIS-Hardened-1566374649
amazon-ebs:找到图像 ID:ami-016ed249dc46e6b40
==> amazon-ebs:创建临时密钥对:packer_5d5cfaf9-bd9b-284e-128a-993f4749f7b2
==> amazon-ebs:为此实例创建临时安全组:packer_5d5cfafa-b6d8-c968-12a3-f293dd2a04e9
==> amazon-ebs:授权从临时安全组中的 [0.0.0.0/0] 访问端口 5986...
==> amazon-ebs:启动源 AWS 实例...
==> amazon-ebs:向源实例添加标签
amazon-ebs:添加标签:“名称”:“Packer Builder”
amazon-ebs:实例 ID:i-08ac611d79b8ecba7
==> amazon-ebs:等待例如(i-08ac611d79b8ecba7)准备好......
==> amazon-ebs:例如正在等待自动生成的密码...
amazon-ebs:这个过程最多需要15分钟是正常的,
amazon-ebs:但通常需要 5 个左右。请稍候。
亚马逊-ebs:
amazon-ebs:找回密码!
==> amazon-ebs:使用 winrm 通信器连接:35.178.131.180
==> amazon-ebs:等待 WinRM 可用...
==> amazon-ebs:等待 WinRM 超时。
==> amazon-ebs:终止源 AWS 实例...
==> amazon-ebs:清理任何多余的卷......
==> amazon-ebs:没有要清理的卷,跳过
==> amazon-ebs:正在删除临时安全组...
==> amazon-ebs:正在删除临时密钥对...
构建“amazon-ebs”错误:等待 WinRM 超时。

==> 一些构建没有成功完成并且有错误:
--> amazon-ebs:等待 WinRM 的超时。

==> 构建完成但没有创建工件。

标签: powershellpacker

解决方案


在我的情况下是防火墙问题。端口“5986”被防火墙阻止。

确保您可以从 PC 远程登录 WinRM 端口!

我设置了“winrm_port”:443 并在 user_data.sh 的片段下方使用。

cmd.exe /c winrm set "winrm/config/listener?Address=*+Transport=HTTPS" "@{Port="443";Hostname="packer";CertificateThumbprint="$($Cert.Thumbprint)"}"

cmd.exe /c netsh advfirewall firewall set rule group="remote administration" new enable=yes

cmd.exe /c netsh firewall add portopening TCP 443 "Port 443"


推荐阅读