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

Windows11下Terraform执行apply时.ppk私钥读取失败求助

问题排查:Windows11下Terraform执行terraform apply时SSH私钥读取失败

在Windows 11环境执行terraform apply命令时,文件provisioner报错:Failed to read ssh private key: no key found。已确认指定路径下存在对应的.ppk文件,怀疑与SSH配置有关,以下是相关信息及排查方案:

版本信息

terraform {
  required_version = ">= 1.0.0"
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 3.63"
     }
  }
}

错误日志

Error: file provisioner error
│
│ with null_resource.copy_ec2_keys,
│ on c4-07-ec2bastion-provisioners.tf line 14, in resource "null_resource" "copy_ec2_keys":
│ 14: provisioner "file" {
│
│ Failed to read ssh private key: no key found

相关Provisioner代码

# Create a Null Resource and Provisioners
resource "null_resource" "copy_ec2_keys" {
  depends_on = [module.ec2_public]
  # Connection Block for Provisioners to connect to EC2 Instance
  connection {
    type     = "ssh"
    host     = aws_eip.bastion_eip.public_ip    
    user     = "ec2-user"
    password = ""
    private_key = file("private-key/eks-terraform-key.ppk")
  }  

## File Provisioner: Copies the terraform-key.ppk file to /tmp/terraform-key.ppk
  provisioner "file" {
    source      = "private-key/eks-terraform-key.ppk"
    destination = "/tmp/eks-terraform-key.ppk"
  }
## Remote Exec Provisioner: Using remote-exec provisioner fix the private key permissions on Bastion Host
  provisioner "remote-exec" {
    inline = [
      "sudo chmod 400 /tmp/eks-terraform-key.ppk"
    ]
  }
## Local Exec Provisioner:  local-exec provisioner (Creation-Time Provisioner - Triggered during Create Resource)
  provisioner "local-exec" {
    command = "echo VPC created on `date` and VPC ID: ${module.vpc.vpc_id} >> creation-time-vpc-id.txt"
    working_dir = "local-exec-output-files/"
    #on_failure = continue
  }

}

排查与解决步骤

  • 转换私钥格式:Terraform的SSH连接不支持PuTTY专属的.ppk格式,必须使用OpenSSH格式的私钥。操作步骤:
    1. 打开PuTTYgen工具,加载现有的.ppk文件
    2. 点击顶部菜单Conversions -> Export OpenSSH key,保存为.pem或.key后缀的文件
    3. 修改Terraform代码中connection块的private_key路径,以及file provisioner的source路径,指向转换后的OpenSSH格式文件
  • 验证文件路径:Windows下确保路径正确,可尝试使用绝对路径(如file("C:/your-project-path/private-key/eks-terraform-key.pem"))测试,避免相对路径解析错误
  • 调整文件权限:Windows系统中,如果私钥文件权限过宽(比如允许其他用户读取),会被SSH客户端拒绝。右键文件 -> 属性 -> 安全 -> 编辑,移除除当前用户外的所有权限,仅保留自己的读取权限
  • 修正换行符:Windows默认的CRLF换行符可能导致密钥解析失败,用文本编辑器(如VS Code)打开转换后的私钥文件,将换行符改为LF格式
  • 检查SSH配置冲突:查看用户目录下的SSH配置文件(C:\Users\<你的用户名>\.ssh\config),确认没有与当前EC2连接冲突的配置项(比如强制指定了其他私钥或代理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:15:32