使用terraform将ssh密钥添加到GCP实例的工作原理,但在控制台上显示错误

时间:2019-05-31 06:38:54

标签: google-cloud-platform terraform

我正在使用以下命令将ssh-keys添加到我的gce实例中: ssh-keys =“ $ {var.ssh_user_name}:$ {var.ssh_pub_key}”

ssh_pub_key是tls_private_key模块的公共密钥输出变量,该模块动态生成ssh-key。

根据GCP ssh-key格式,应在公共密钥的末尾附加用户名,但使用tls_private_key资源生成动态密钥不会添加用户名

添加ssh-keys之后,我可以使用私钥登录到gcp实例,但是如果我尝试在gcp控制台上进行编辑,则会出现以下错误:

“ SSH密钥格式错误”

这是由于没有在末尾添加用户名。 我的问题是: ssh-keys =“ $ {var.ssh_user_name}:$ {var.ssh_pub_key}”

这不是应该照顾吗?还有另一种方法吗?如果ssh-key确实是错误的,那么甚至都不应该使用ssh。我已经搜索了所有通过terraform在gcp实例级别添加ssh-key的方法,我找不到其他东西

ssh-keys =“ $ {var.ssh_user_name}:$ {var.ssh_pub_key}”

var.ssh_pub_key在末尾有额外的\ n行字符,我无法修改,这是密钥生成模块的输出变量。

1 个答案:

答案 0 :(得分:1)

因此,用户名是公用密钥中必需的,而不是私有密钥。那么像这样的简单东西呢?

"${var.ssh_user_name}:${var.ssh_pub_key} ${var.ssh_user_name}"-现在,地形插值应该使您的公钥采用正确的格式

编辑: 因此,以纯terraform结尾的\ n字符的解决方案是:

locals {
  ssh_pub_key_without_new_line = "${replace(var.ssh_pub_key, "\n", "")}"
}

然后

"${var.ssh_user_name}:${local.ssh_pub_key_without_new_line} ${var.ssh_user_name}"