如何解决amazon-ebs:SSH等待超时(Blackhole状态)问题?
Packer构建AWS镜像时SSH超时问题排查与解决
问题重现
运行Packer构建Amazon EBS镜像时,持续出现SSH超时错误:
==> amazon-ebs: Terminating the source AWS instance... ==> amazon-ebs: Cleaning up any extra volumes... ==> amazon-ebs: No volumes to clean up, skipping ==> amazon-ebs: Deleting temporary security group... ==> amazon-ebs: Deleting temporary keypair... Build 'amazon-ebs' errored after 6 minutes 23 seconds: Timeout waiting for SSH.
==> Some builds didn't complete successfully and had errors: --> amazon-ebs: Timeout waiting for SSH.
已进行的操作:删除默认VPC,创建带子网的新VPC,并在Packer JSON配置中添加如下参数,但问题依旧:
"vpc_id": "vpc-0bb5a477b899e995d", "subnet_id": "subnet-00934a52461387401"
同时已检查VPC及路由表配置。
排查与解决步骤
1. 确认子网的公网访问能力
- 确保使用的是公有子网:路由表中必须存在
0.0.0.0/0指向Internet Gateway(IGW)的路由条目。若使用私有子网,需配置NAT Gateway并在Packer中添加跳板机代理配置。 - 检查子网的「自动分配公有IP」选项是否开启:若未开启,需在Packer配置中添加
"associate_public_ip_address": true,强制为构建实例分配公网IP。
2. 验证安全组SSH访问规则
Packer默认会创建临时安全组,但需确保:
- 临时安全组允许你的本地IP(或临时用
0.0.0.0/0测试)访问22端口; - 若指定了自定义安全组(通过
security_group_ids配置),该安全组必须包含SSH入站规则。
3. 检查基础AMI的SSH配置
- 手动启动同版本的基础AMI实例,尝试从本地SSH连接,确认:
- 密钥对匹配正确;
- SSH服务正常运行;
- AMI未禁用对应用户的SSH登录(比如Amazon Linux默认用
ec2-user而非root)。
4. 调整Packer SSH超时参数
在Packer配置中延长超时时间,避免因实例启动慢导致的超时:
"ssh_timeout": "10m", "ssh_handshake_attempts": "10"
5. 确认VPC的DNS设置
检查VPC的「DNS主机名」和「DNS解析」选项是否均为开启状态,否则实例无法正常解析IP,导致Packer无法建立SSH连接。
内容的提问来源于stack exchange,提问作者Richard Rublev
相关产品推荐
相关产品推荐

