无法连接到由 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
我正在使用 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