无法连接到由 terraform 创建的 AWS Ubuntu 实例

Unable to make connection to AWS Ubuntu instance created by terraform

我正在使用 terraform 0.9.6

 provisioner "file" {
    source      = "conf/test.txt"
    destination = "/etc/test.txt"
    connection {
    user = "ubuntu"
    private_key = "${file("test.ppk")}"
    agent = "false" 
    timeout = "30s"
    }
  }

这个块不断给我 No key file found test.ppk 错误。尽管该文件位于我的 .tf 文件所在的同一文件夹中。我也尝试提供绝对路径 C:\test.ppk 但问题仍然存在。我在 windows 上 运行 terraform。知道为什么没有读取 ppk 文件吗?此外,此 ppk 文件受密码保护,如何在连接对象中传递 ppk 文件的密码?

我觉得你的私钥格式有问题。 ppk 是 Putty 私钥格式。尝试为您的供应商使用 pem 私钥格式。

你的第一个问题是私钥需要PEM编码,你可以使用PuTTYGen

命令行界面 puttygen privatekey.ppk -O private-openssh -o privatekey.pem

界面 启动 PuTTYgen。以 .ppk 格式加载您的私钥。然后转到菜单 > 转换 > 导出 > OpenSSH。这将创建一个 .pem 格式的密钥。

你的下一个问题是 terraform $file 试图找到文件本身。 路径是相对于工作目录解释的。

file(path) - Reads the contents of a file into the string. Variables in this file are not interpolated. The contents of the file are read as-is. The path is interpreted relative to the working directory. Path variables can be used to reference paths relative to other base locations. For example, when using file() from inside a module, you generally want to make the path relative to the module base, like this: file("${path.module}/file").

https://www.terraform.io/docs/configuration/interpolation.html#file_path_

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html