未添加来自元数据的 Google Cloud Compute 实例 SSH 密钥
Posted
技术标签:
【中文标题】未添加来自元数据的 Google Cloud Compute 实例 SSH 密钥【英文标题】:Google Cloud Compute instance SSH key from metadata not added 【发布时间】:2018-08-16 20:27:27 【问题描述】:我已经成功地将 SSH 密钥添加到新生成的实例有一段时间了,但突然之间它就不起作用了。它们的密钥不会添加到目标帐户(如果帐户不存在,则不会创建该帐户)。它仍然适用于我的一个项目,但它不适用于包含第一个代码的改编版本的另一个项目。两个代码执行的步骤如下:
-
从快照创建磁盘。
生成 RSA 密钥对。
将元数据中的
ssh-keys
属性设置为上一步生成的公钥,格式为Google Cloud 可理解的格式(<username>:ssh-rsa <key> <username>
)。
使用第一步创建的磁盘和第三步创建的元数据创建实例。
当我在 Google Cloud Console 上查看实例数据时,它在 SSH 密钥部分为正确的用户分配了正确的密钥。但是,当我通过 SSH 连接到实例时,尚未将密钥添加到该用户的 authorized_keys
文件中。以防万一,我尝试在没有该用户的情况下重新创建快照,以便可以动态创建用户(这应该可以),但在这种情况下不会创建用户。
最后,Google Cloud 的行为就像 SSH 密钥不在元数据中一样,但它确实存在。我遇到了this answer,但似乎无法理解这部分:
因此,GCE 平台仅在您未指定自己的密钥(在创建实例时或之后)时才负责在实例中放置/删除您的 ssh 密钥(...)。如果这样做,GCE 平台会将 ssh 密钥管理视为手动管理,并且不会与元数据存储保持同步。
我没有看到我正在做的任何事情可能会触发它进入手动模式,但显然某处存在问题。
我刚刚尝试从较旧的快照运行相同的进程,它运行完美。我会进一步调查,看看是什么原因造成的。
【问题讨论】:
【参考方案1】:您需要拥有最新版本的Guest Tools。以下是在 Ubuntu 上安装最新版本的示例:
$ sudo apt-add-repository universe
$ sudo apt install -y python-google-compute-engine python3-google-compute-engine google-compute-engine-oslogin gce-compute-image-packages
您可以阅读here更多详细信息和其他操作系统。
【讨论】:
它适用于旧快照,但不适用于新快照;我看不出旧快照如何在没有新版本的情况下拥有来宾工具(或正确版本)。 请我进一步了解这个问题。我为 Google Cloud 支持工作。您能否打开一个私人问题,并添加您的项目编号:issuetracker.google.com/issues/new?component=187164 一旦我们找到解决方案,我将发布它,以便任何人都可以得到答案。 刚刚打开了一个 ID 为 74599290 的问题。 您好@PLPeeters,根据我们对问题跟踪器的讨论,我们目前无法重现此行为。如果以后再次发生这种情况,您可以重新打开一个带有详细重现步骤的新问题跟踪器,我们很乐意为您提供帮助。 我希望我现在可以提供一个最小的工作示例,但是最近几周我的时间有点短。如果我有时间最终开始这样做,我一定会再次联系!【参考方案2】:我尝试在 Debian-10 实例中重现此问题,但无法重现。我从快照创建了一个新实例,并在实例级元数据中的SSH Keys
部分中添加了一个公钥对,然后我尝试使用 SSH 密钥进行 SSH,我能够继续。
这似乎是您无法添加 SSH 密钥的特定操作系统的问题。在这种情况下,我建议收集尽可能多的信息来调试根本原因。
我建议验证来宾环境是否正在运行1,和/或手动安装它2,因为它使与Metadata server 的通信成为可能。
还要确认 VM 能够访问元数据服务器 169.254.169.254
metadata.google.internal
。
username@debian-10-000:~$ ping metadata.google.internal
PING metadata.google.internal (169.254.169.254) 56(84) bytes of data.
64 bytes from metadata.google.internal (169.254.169.254): icmp_seq=1 ttl=255 time=0.128 ms
Related.
【讨论】:
以上是关于未添加来自元数据的 Google Cloud Compute 实例 SSH 密钥的主要内容,如果未能解决你的问题,请参考以下文章
将自定义元数据设置为 Google Cloud Storage 中的对象
Google Cloud Functions 节点 JS - 来自客户端获取的 POST 请求,请求正文未通过 [重复]
google-cloud-profiler 元数据服务器警告
如何从 Google Cloud Storage 中获取特定对象元数据信息?