cloud-init 没有在 gce 中插入实例级 ssh 密钥

cloud-init 没有在 gce 中插入实例级 ssh 密钥

我正在通过(YAML 表示)

metadata:
 items: 
 - key: sshKeys
   value: root:ssh-rsa AAAAB... non@nan

创建 gcloud 实例时。但我无法 ssh 到实例

$ ssh 139.242.197.104.bc.googleusercontent.com
Host key fingerprint is SHA256:aSSOS1tMiF9h43C6UIJQW0TqXuYVMfRic3Lm7gYRECQ
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

看起来启动时未插入 ssh 密钥。实例是标准 RHEL 7.2 kvm 客户机映像,从 qcow2 转换为原始格式并上传。你知道我所做的是否是在 GCE 中指定 ssh 密钥的正确方法,以及 cloud-init 是否支持我想要的吗?

答案1

嗯,似乎无法得到任何 GCE 答案。不过我搞明白了。首先,当前的 Red Hat Enterprise Linux (v7.2) cloud-init 版本不支持实例 ssh 密钥(它仅处理项目级密钥)。cloud-init但 trunk 已经支持它们,因此希望下游能尽快支持。与此同时,我使用以下内容user-data来模拟这一点(再次使用 YAML 表示):元数据:

 items:
 - key: sshKeys
   value: root:ssh-rsa AAAAB... non@nan 
 - key: user-data
   value:|
     #cloud-config
     disable_root: false
     preserve_hostname: true
     runcmd:
     - "curl 'http://metadata.google.internal/computeMetadata/v1/instance/attributes/sshKeys' -H 'Metadata-Flavor: Google' | sed -r -e 's/(^|,)[^\\S]*:/\\1/g' -e 's/,/\\n/g' >> /root/.ssh/authorized_keys"

请注意,Google 文档仅讨论startup-script元数据键。据我所知,甚至上游cloud-init也不关心该元数据键。它正在寻找user-data如上所示的键。

希望这可以帮助。

相关内容