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

Windows10环境Terraform执行apply报错无法读取SSH私钥:未找到密钥

问题根因

你遇到的Failed to read ssh private key: no key found报错主要由以下几类原因导致:

  • Windows路径转义异常:Terraform的file()函数对Windows系统的反斜杠路径转义处理容易出错
  • 密钥路径不一致:你提供的两份配置中私钥的文件路径、用户名、文件名存在差异,可能指向不存在的文件
  • 私钥权限不符合SSH要求:SSH客户端默认拒绝权限开放度过高的私钥文件
  • 基础连通性问题:未提前验证私钥、安全组规则的有效性
可行解决方案

按以下步骤逐一排查修改即可解决:

  1. 统一并修正路径写法
    Terraform在Windows环境下优先使用正斜杠作为路径分隔符,避免反斜杠转义错误,同时确保路径中的用户名、文件名和实际存储的私钥文件完全一致:
private_key = file("C:/Users/asdfsd/Downloads/asdfsd-ubuntu.pem")

如果将私钥文件放在Terraform配置文件(main.tf)同级目录,可以直接使用内置路径变量path.module简化写法,该变量指代当前配置文件所在的本地目录(你之前看到的${module.path}为错误写法,正确内置变量为path.module):

private_key = file("${path.module}/asdfsd-ubuntu.pem")

若你偏好使用local变量存储私钥内容,只要保证local中读取的文件路径和实际路径一致即可正常生效。

  1. 调整私钥文件权限
    Windows系统下需要限制私钥文件的访问权限,仅保留当前用户的读取权限:
  • 右键点击pem文件→选择「属性」→切换到「安全」标签页→点击「高级」
  • 点击「禁用继承」→选择「从此对象中删除所有已继承的权限」
  • 点击「添加」→选择当前Windows登录用户→仅勾选「读取」权限→保存所有配置
  1. 提前验证基础连通性
    先手动通过SSH工具验证私钥和网络连通性,排除非Terraform层面的问题:
ssh -i C:/Users/asdfsd/Downloads/asdfsd-ubuntu.pem ubuntu@<你的EC2实例公网IP>

如果手动连接失败,先检查EC2实例关联的安全组是否开放了22端口的入站规则,以及你的本地公网IP是否在允许访问的范围内。

  1. 补充connection块超时配置
    避免EC2实例刚启动未完成SSH初始化导致的连接失败,在connection块中添加超时配置:
connection {
  type = "ssh"
  host = self.public_ip
  user = "ubuntu"
  private_key = file("C:/Users/asdfsd/Downloads/asdfsd-ubuntu.pem")
  timeout = "5m"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:06:02