无法在 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 密钥。要解决此问题,您应该生成一个没有密码的密钥。