如何使用terraform向GCP实例添加ssh密钥?

如何使用terraform向GCP实例添加ssh密钥?,ssh,google-cloud-platform,terraform,Ssh,Google Cloud Platform,Terraform,所以我有一个terraform脚本,可以在Google云平台中创建实例,我希望我的terraform脚本能够将我的ssh密钥添加到我创建的实例中,这样我就可以通过ssh提供它们。这是我当前的地形脚本 #PROVIDER INFO provider "google" { credentials = "${file("account.json")}" project = "myProject" region = "us-central1" } #MAKING CON

所以我有一个terraform脚本,可以在Google云平台中创建实例,我希望我的terraform脚本能够将我的ssh密钥添加到我创建的实例中,这样我就可以通过ssh提供它们。这是我当前的地形脚本

#PROVIDER INFO
provider "google" {
  credentials = "${file("account.json")}"
  project     = "myProject"
  region      = "us-central1"
}


#MAKING CONSUL SERVERS
resource "google_compute_instance" "default" {
  count    =  3
  name     =  "a-consul${count.index}"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  disk {
    image = "ubuntu-1404-trusty-v20160627"
  }

  # Local SSD disk
  disk {
    type    = "local-ssd"
    scratch = true
  }

  network_interface {
    network = "myNetwork"
    access_config {}
  }
}

要让我的terraform脚本添加我的ssh密钥,我需要添加什么?/Users/myUsername/.ssh/id\u rsa.pub?

我认为类似的方法应该可以工作:

  metadata = {
    ssh-keys = "${var.gce_ssh_user}:${file(var.gce_ssh_pub_key_file)}"
  }
描述了元数据机制,我在

找到了这个示例,这里是一个测试示例

  metadata {
    sshKeys = "${var.ssh_user}:${var.ssh_key} \n${var.ssh_user1}:${var.ssh_key1}"
}

记录在案。从0.12开始,该块看起来应该如下所示:

resource "google_compute_instance" "default" {
  # ...

  metadata = {
    ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
  }

  # ...
}

(注意
=
元数据
令牌和
ssh密钥
sshKeys
之后签名)。

如果需要多个密钥,可以像这样使用
herdoc

  metadata = {
    "ssh-keys" = <<EOT
<user>:<key>
<user>:<key>
EOT
  }
元数据={

“ssh密钥”=您可以使用以下

metadata = {
  ssh-keys = "username:${file("username.pub")}"
}

我一直在努力使用terraform创建一个具有ssh密钥的实例,这个答案已经过测试,也可以使用。

嘿,我已经对这个问题进行了快速的跟进,它与添加ssh密钥无关,但它可能使用gcp terraform实例的
元数据
功能。我想让terraform添加
--可以ip转发
tag到我的实例中,我该怎么做呢?看起来你只需将
can_ip_forward=true
添加到资源中:嗨,小心,
sshKeys
现在已被弃用,当前语法是
ssh-keys
,使用此方法时,我可以创建实例并登录到它,但如果我转到GCP控制台并尝试编辑实例,它将被禁用ssh密钥中的ws-error,我认为这可能是因为密钥用户名的末尾应该出现错误:ssh密钥的格式错误。请小心编写
ssh密钥
not
ssh\u密钥
它们都被接受,但它们的作用不同。您最可能想要
ssh密钥
not
ssh\u密钥
ssh\u密钥
安装云帐户的密钥,
ssh-keys
安装指定文件中的密钥。当您将“${user}:${key}”替换为“${var.user}:${var.key}”时,这将起作用,虽然我认为传递一系列密钥是过分的-我们应该尝试创建不需要ssh的不可变基础设施。为什么我们需要为此添加
username
?如果没有
username
,就不能传递
ssh
密钥本身?为什么我们需要为此添加
username
如果没有
username
,ust无法传递
ssh
密钥本身?如果没有username,terraform如何知道如何使用ssh或使用服务器登录?很好,很干净,但不能添加多个密钥。@widmo您必须使用具有不同用户名的多个pub文件,并使用循环函数一次添加多个密钥。@sambit ok,谢谢。我期待d我可以有一个包含多个公钥的文件(对于一个用户)谢谢!为什么我们需要为此添加
username
?如果没有
username
,就无法传递
ssh
密钥本身?