【问题标题】:Terraform apply fails with "Failed to read ssh private key: no key found"Terraform 应用失败并显示“无法读取 ssh 私钥:找不到密钥”
【发布时间】:2021-10-31 18:10:47
【问题描述】:

我在 windows-10 上使用以下 terraform 配置 Terraform v1.0.4 在 windows_amd64 上

  • 提供者 registry.terraform.io/hashicorp/aws v3.55.0

我正在尝试使用配置程序“remote-exec”在 ec2 实例上安装一些软件包。在此,当我在连接块中提供 private_key 时,我收到以下错误消息

         Failed to read ssh private key: no key found 

这就是我的远程执行和连接块的样子

                    terraform {
                    required_providers {
                        aws = {
                        source  = "hashicorp/aws"
                        version = "~> 3.0"
                        }
                    }
                    }
                    resource "aws_instance" sandbox {
                        ami =           "ami-0ff338189efb7ed37"
                        instance_type =     "t3.micro"
                        tags    = {
                            Name =      "sandbox"
                            Description = "sandbox server"
                        }
                            provisioner "remote-exec" {
                            inline = [ "sudo apt update",
                                        "sudo apt install ansible -y" 
                                    ]
                        }
                            connection {
                            type = "ssh"
                            host = self.public_ip
                            user = "ubuntu"
                            private_key = file("C:\\Users\\asdfsd\\Downloads\\asdfsd-ubuntu.pem")
                        }
                        key_name  = aws_key_pair.sandbox_key.id
                        vpc_security_group_ids = [aws_security_group.ssh_access.id]
                    }
                    resource "aws_key_pair"  "sandbox_key" {
                        public_key = file("C:\\Users\\asdfsd\\Downloads\\asdfsd-ubuntu-public.pem")
                    }

我尝试在 stackoverflow 上引用其他类似的线程,但他们谈论的是一些 ${module.path}。我不确定这条路径指的是什么。因此,该解决方案对我不起作用。

有没有人遇到过类似的问题?非常感谢任何帮助。

此外,我尝试读取私钥的内容并将其作为文本传递给连接块,但它也不起作用。

         locals {
             key_data = file("C:\\Users\\asdfasdf\\Downloads\\asdffa-ubuntu.pem")
         }
         .
         .
         .
         private_key = local.key_data
         .
         .


Best regards,
Amit Joshi.

【问题讨论】:

  • 你可以试试:/c/Users/asdfasdf/Downloads/asdfasdf-ubuntu.pem
  • 第二种方法是否会出现同样的错误?您能否扩展该错误消息的上下文,以便它包含引发错误的资源?理想情况下,您的 Terraform 代码也应该更完整,如 minimal reproducible example 所述。最后,您确定密钥文件存在于该路径中,并且您运行 Terraform 的用户对该文件具有读取权限吗?
  • /c/Users/asdfasdf/Downloads/asdfasdf-ubuntu.pem - 这不起作用。
  • @ydaetskcoR 我已经用实际代码更新了问题描述。此外,用户可以访问这些文件,并且与运行 terraform 的用户相同。
  • 您尚未扩展错误消息以显示错误的完整上下文,因此不清楚哪个资源引发了该错误。您能否展开它以显示完整的错误输出?

标签: terraform


【解决方案1】:

在我的 ubuntu 系统上,我指的是没有 .pem 扩展名的密钥。

我在最后尝试使用.pem 时遇到了同样的问题。我不知道这是否会解决问题,因为您在 Windows 上,但您可以尝试一下。

同时尝试将密钥移动到您的 tf 代码所在的同一目录。

【讨论】:

  • 引用不带 .pem 的密钥并没有真正起作用。
  • ``` ╷ │ 错误:函数参数无效│ │ 在 aws-ec2.tf 第 47 行,资源“aws_instance”“沙盒”中:│ 47:private_key = file("C:\\ Users\\asdfasd\\Downloads\\asdfasd-ubuntu") │ │ “path”参数的值无效:C:\Users\ajoshi5\Downloads\ajoshi-ubuntu 中不存在文件;此功能仅适用于作为配置源代码的一部分分发的文件,因此如果此文件将由此配置中的资源创建,则您必须改为从该资源的属性中获取此结果。 ```
猜你喜欢
  • 2020-03-29
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多