powershell - 我收到 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 的超时。 ==> 构建完成但没有创建工件。
解决方案
在我的情况下是防火墙问题。端口“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"
推荐阅读
- ruby-on-rails - rails drop down 如何在编辑时显示选定的值?
- sql - 将表数据存储在sql数据库中
- android - 如何禁用返回、主页、多任务物理按钮?
- python - 多臂老虎机:当随机概率小于分配给老虎机的成功概率时,为什么我们将奖励增加 1
- html - 托管网站后,图像容器在 chrome 浏览器中的高度增加
- android - 为什么 Tensorflow 对象检测 API 使用 YUV420SP 到 ARGB8888 的转换
- docker - Docker-compose:查看容器内设置了哪些环境变量
- django - 在 django 的 /admin 中找不到模板
- java - 如何找到所有空按钮并随机选择一个?
- javascript - 如何在没有 root 访问权限的机器上安装/使用 puppeteer?