如何使用terraform向GCP实例添加ssh密钥?
所以我有一个terraform脚本,可以在Google云平台中创建实例,我希望我的terraform脚本能够将我的ssh密钥添加到我创建的实例中,这样我就可以通过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
#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密钥
notssh\u密钥
它们都被接受,但它们的作用不同。您最可能想要ssh密钥
notssh\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
密钥本身?