首页 > 解决方案 > 使用 terraform 向 GCP 实例添加 ssh 密钥有效,但在控制台上显示错误

问题描述

我正在使用以下方法将 ssh-keys 添加到我的 gce 实例中:

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

ssh_pub_key 是动态生成 ssh-keys 的 tls_private_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行字符,我无法修改这是密钥生成模块的输出变量。

标签: google-cloud-platformterraform

解决方案


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

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

编辑:所以 \n 字符在纯 terraform 末尾的解决方案是:

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}"


推荐阅读