google-cloud-platform - 使用 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
行字符,我无法修改这是密钥生成模块的输出变量。
解决方案
因此,公钥中需要用户名 - 而不是私人密钥。那么像这样简单的东西呢
"${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}"
推荐阅读
- javascript - “MatButton”类型中缺少属性“禁用”,但在“CanDisable”类型中是必需的
- python - python中的按键检测而不劫持按键
- python-3.x - Pypyodbc 无法连接到启动测试的服务器
- flutter - Flutter 构建的应用程序 apk 不会安装在 Android 11 上
- asp.net - 部分 ASP.net 部署问题 - “无法加载程序集“App_Web_xxx.dll”,请确保在访问页面之前对其进行编译”
- node.js - 如何使用 stompit 删除持久订阅
- c# - C# OpenTK 鼠标拾取不正确?
- json.net - 我的构建服务器如何在不将其签入源代码控制的情况下使用 JsonSchema 许可证?
- wordpress - 如何在我的原生 WP 评论表单中添加必填复选框?
- reactjs - 用 Jest/Enzyme 覆盖自定义钩子内的回调参数