GCE 项目范围的 SSH 密钥无法传播

GCE 项目范围的 SSH 密钥无法传播

我注意到,在我的 GCE 集群中,当我将 SSH 密钥添加到项目元数据时,它会自动添加到 /home/[user]/.ssh/authorized_keys。这是我期望的行为(也是我目前正在执行的任务的期望)。但是,集群中的一台机器的 authorized_keys 文件根本没有更新,无论我删除还是添加密钥到项目元数据。我甚至尝试完全删除 authorized_keys 文件,看看它是否会重新创建(没有)。

所有服务器都是最新的 Ubuntu 14.04,据我所知,只有这一个实例有问题。它是集群中最老的实例,所以在读取时https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#addkey我不知道这是否符合以下声明:

如果您的实例不支持较新的元数据值,请添加或删除较旧的仅限实例的 sshKeys 值,该值仅将您的密钥应用于特定实例,并且在设置值时还会阻止所有项目范围的密钥。

但是我删除了仅实例的 sshKeys,问题仍然存在。在我销毁并重新创建映像之前,有什么想法可以确保我能够使用“新”元数据吗?

答案1

首先,确保您的 VM 实例可以与元数据服务器通信并可以读取项目范围的sshKeys值。要验证这一点,请连接到您的 VM 并运行以下命令:

curl http://metadata.google.internal/computeMetadata/v1/project/attributes/sshKeys -H "Metadata-Flavor: Google"

该命令的输出应该是您已添加到项目元数据中的 SSH 密钥。如果该命令无法与元数据通信,则意味着您的内部防火墙阻止了虚拟机与元数据服务器之间的流量。

如果通信成功,并且您可以读取 的值sshKeys,则应验证帐户管理器守护程序是否正在运行。在 Ubuntu 14.04 中,守护程序脚本位于:

/usr/share/google/google_daemon/manage_accounts.py

使用以下命令验证其运行状态:

sudo ps aux | grep manage_accounts.py

答案2

就我而言,这是因为我查看了错误的帐户。帐户名称是从 SSH 密钥的最后一部分自动生成的,请确保查看所有主文件夹以查看其安装位置。

相关内容