无法在 DigitalOcean 上使用 Terraform 进行文件配置
Cannot have file provisioner working with Terraform on DigitalOcean
我尝试使用 Terraform 创建一个安装了 consul 的 DigitalOcean 节点。
我正在使用以下 .tf
文件,但它挂断了并且没有将 consul .zip 文件复制到 Droplet 上。
几分钟后我收到以下错误消息:
ssh: handshake failed: ssh: unable to authenticate, attempted methods
[none publickey], no supported methods remain
虽然正确创建了液滴。我可以使用我指定的密钥登录命令行(因此不指定密码)。我猜连接部分可能有问题,但不确定我遗漏了什么。
有什么想法吗?
variable "do_token" {}
# Configure the DigitalOcean Provider
provider "digitalocean" {
token = "${var.do_token}"
}
# Create nodes
resource "digitalocean_droplet" "consul" {
count = "1"
image = "ubuntu-14-04-x64"
name = "consul-${count.index+1}"
region = "lon1"
size = "1gb"
ssh_keys = ["7b:51:d3:e3:ae:6e:c6:e2:61:2d:40:56:17:54:fc:e3"]
connection {
type = "ssh"
user = "root"
agent = true
}
provisioner "file" {
source = "consul_0.7.1_linux_amd64.zip"
destination = "/tmp/consul_0.7.1_linux_amd64.zip"
}
provisioner "remote-exec" {
inline = [
"sudo unzip -d /usr/local/bin /tmp/consul_0.7.1_linux_amd64.zip"
]
}
}
Terraform 要求您 specify the private SSH key 用于与 private_key
的连接 您可以创建一个包含私钥路径的新变量,以便与 Terraform 的文件插值函数一起使用:
connection {
type = "ssh"
user = "root"
agent = true
private_key = "${file("${var.private_key_path}")}"
}
您遇到此问题是因为您有一个受密码保护的 ssh 密钥。要解决此问题,您应该生成一个没有密码的密钥。
我尝试使用 Terraform 创建一个安装了 consul 的 DigitalOcean 节点。
我正在使用以下 .tf
文件,但它挂断了并且没有将 consul .zip 文件复制到 Droplet 上。
几分钟后我收到以下错误消息:
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
虽然正确创建了液滴。我可以使用我指定的密钥登录命令行(因此不指定密码)。我猜连接部分可能有问题,但不确定我遗漏了什么。
有什么想法吗?
variable "do_token" {}
# Configure the DigitalOcean Provider
provider "digitalocean" {
token = "${var.do_token}"
}
# Create nodes
resource "digitalocean_droplet" "consul" {
count = "1"
image = "ubuntu-14-04-x64"
name = "consul-${count.index+1}"
region = "lon1"
size = "1gb"
ssh_keys = ["7b:51:d3:e3:ae:6e:c6:e2:61:2d:40:56:17:54:fc:e3"]
connection {
type = "ssh"
user = "root"
agent = true
}
provisioner "file" {
source = "consul_0.7.1_linux_amd64.zip"
destination = "/tmp/consul_0.7.1_linux_amd64.zip"
}
provisioner "remote-exec" {
inline = [
"sudo unzip -d /usr/local/bin /tmp/consul_0.7.1_linux_amd64.zip"
]
}
}
Terraform 要求您 specify the private SSH key 用于与 private_key
的连接 您可以创建一个包含私钥路径的新变量,以便与 Terraform 的文件插值函数一起使用:
connection {
type = "ssh"
user = "root"
agent = true
private_key = "${file("${var.private_key_path}")}"
}
您遇到此问题是因为您有一个受密码保护的 ssh 密钥。要解决此问题,您应该生成一个没有密码的密钥。