【问题标题】:Adding a ssh key to an GCP instance using terraform works but shows error on the console使用 terraform 向 GCP 实例添加 ssh 密钥有效,但在控制台上显示错误
【发布时间】:2019-10-16 19:09:19
【问题描述】:

我正在使用这个向我的 gce 实例添加 ssh-keys:

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

ssh_pub_key 是动态生成 ssh-keys 的 tls_private_key 模块的公钥输出变量。

根据 GCP ssh-key 格式,在 public 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-platform terraform


    【解决方案1】:

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

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

    编辑: 因此,在纯 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}"

    【讨论】:

    • 是的,我试过了,但问题是 tls_private_key 的输出,public_key_openssh 有额外的 \n 行字符,所以用户名被添加到下一行
    • 我修改了答案来解决这个问题 - 如果它真的解决了你的问题,如果你能接受它,我将不胜感激:)
    • @JakubBujny 嗨,您能告诉我如何使用 terraform SSH 到我的 gcp 机器以运行我尝试使用(公共和私有)生成密钥并提供资源路径的脚本但是使用这个我不会执行我的脚本你能告诉我我怎么能运行
    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2019-10-11
    • 2021-09-22
    • 2016-05-03
    • 2021-07-18
    • 2019-10-25
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多