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格式的私钥。操作步骤:- 打开PuTTYgen工具,加载现有的
.ppk文件 - 点击顶部菜单
Conversions->Export OpenSSH key,保存为.pem或.key后缀的文件 - 修改Terraform代码中
connection块的private_key路径,以及fileprovisioner的source路径,指向转换后的OpenSSH格式文件
- 打开PuTTYgen工具,加载现有的
- 验证文件路径: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
相关产品推荐
相关产品推荐

