You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform自动化部署EC2实例SSH登录超时问题排查求助

分析Terraform EC2 SSH登录超时问题

看你提供的代码片段,几个常见的“坑”可能导致了这个超时问题,我帮你逐一排查:

1. PEM密钥文件的路径与格式问题

你用了file("PluralSight_Key_Pair3"),这里要确认几个点:

  • 密钥文件的完整路径是否正确?如果文件不在Terraform工作目录下,得用相对路径(比如./keys/PluralSight_Key_Pair3.pem)或者绝对路径,Terraform找不到密钥的话肯定连不上实例。
  • 密钥是否真的转换为OpenSSH格式?你可以本地执行ssh-keygen -p -f PluralSight_Key_Pair3 -m pem命令转换,确保文件开头是-----BEGIN RSA PRIVATE KEY-----,而不是PKCS#8格式。
  • 密钥文件的权限是否合规?Linux/macOS下要把权限改成chmod 400 PluralSight_Key_Pair3,权限太宽的话SSH会拒绝使用这个密钥。

2. EC2实例的网络与安全组配置

这是最容易导致超时的原因:

  • 安全组是否允许**22端口(SSH)**从你的本地IP访问?如果安全组只开放了内网或其他IP范围,Terraform的remote-exec根本无法连接到实例。
  • 实例是否分配了公网IP?如果是私有子网的实例,要么给它绑定弹性公网IP(EIP),要么Terraform的运行环境处于VPC内网能访问实例,否则公网无法建立SSH连接。
  • 实例的状态检查是否通过?可以去AWS控制台查看实例的系统状态和实例状态是否都是绿色,状态异常的话也会导致连接失败。

3. Connection块的必要配置缺失

你的connection块只指定了user和private_key,可能需要补充这些参数:

  • host:默认Terraform会用实例的公网IP,但显式指定更稳妥,比如host = self.public_ip或者host = aws_instance.your_instance.public_ip。
  • timeout:默认超时时间可能不够,改成timeout = "5m"给实例足够的启动和SSH服务初始化时间。

修改后的connection块示例:

connection {
  user        = "ec2-user"
  private_key = file("./PluralSight_Key_Pair3.pem") # 确保路径和后缀正确
  host        = self.public_ip
  timeout     = "5m"
}

4. Remote-exec的时机问题

有时候实例刚启动,SSH服务还没完全就绪,Terraform就开始尝试连接,导致超时。可以添加一个本地执行的provisioner来延迟:

provisioner "local-exec" {
  command = "sleep 30" # 给SSH服务启动留足时间
}

provisioner "remote-exec" {
  inline = [
    "sudo yum install nginx -y"
  ]
}

你可以先从安全组配置和密钥文件这两个最容易出问题的点排查,应该能解决超时问题。

内容的提问来源于stack exchange,提问作者PsionTheory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:40:15