我正在通过(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
如上所示的键。
希望这可以帮助。