Redhat

cloud-init 不在 gce 中插入實例級 ssh 密鑰

  • February 22, 2016

我通過(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 密鑰未在啟動時插入。實例是從 qcow2 轉換為原始格式並上傳的標準 RHEL 7.2 kvm 來賓映像。知道我正在做的是否是在 GCE 中指定 ssh 密鑰的正確咒語,以及 cloud-init 是否支持我想要的?

嗯,似乎無法得到任何 GCE 答案。不過想通了。首先,目前的 Red Hat Enterprise Linux (v7.2) cloud-init 版本不支持實例 ssh 密鑰(它只處理項目級密鑰)。cloud-init主幹雖然確實已經支持它們,所以希望下游很快就會恢復。與此同時,我使用以下內容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如上所示的密鑰。

希望這可以幫助。

引用自:https://serverfault.com/questions/758519