Ssh

如何從 google 計算引擎實例安全地檢索 ssh 主機密鑰?

  • July 26, 2020

我想~/.ssh/known_hosts用新創建的 GCE 實例的主機密鑰資訊更新我的。但我不確定如何安全地檢索該資訊。

我想像

gcloud compute ssh <GCEUSER>@<GCEHOST> --command='ssh-keyscan 127.0.0.1'

可能會奏效。但是(根據gcloud compute ssh 文件)似乎只是一個包裝器ssh(並且,根據StrictHostKeyChecking=no在 $HOME/.config/gcloud/logs/ 下的關聯日誌文件中列出的參數中看到的,顯然沒有做任何事情檢查主機的身份)。

似乎確實有一種方法可以使用 Web 控制台來啟動基於瀏覽器的 ssh 會話(並以互動方式/手動執行ssh-keyscan),但是 1)我看不到內部結構以知道它是否真的像應有的那樣安全和 2) 不是用於腳本集成的有效 API。

是否有gcloud用於安全檢索 GCE 實例的主機密鑰的 API/機制?

不,沒有直接的方法可以做到這一點(有一個懸而未決的問題可以解決這個安全風險)。

OP 連結到錯誤 35907612(Rahi 最初提到),該錯誤標記為“已修復”,並帶有指向文件Storing host keys的連結。

要獲取主機密鑰,您需要在創建 GCE 實例之前期間啟用“訪客屬性” 。 我在項目範圍內啟用了它(不確定為什麼預設禁用它)。或者,您有機會在創建實例時啟用它。

根據文件,gcloud需要填充來賓屬性,但我似乎可以在實例啟動後立即跳轉到“確認主機密鑰儲存為來賓屬性”步驟。

筆記

  1. 在第 2 步(確認密鑰)中,我選擇了選項 2,因為我沒有要求在最後一步gcloud填充~/.ssh/google_compute_known_hosts,所以我想查看密鑰,而不僅僅是驗證它們是否在“某處”。
  2. 當您執行get-guest-attributessub-command時,--project--zone標誌都是可選的,並且它們預設為使用 設置的配置gcloud config
  3. 要直接從 獲取主機密鑰的 SHA-256 雜湊get-guest-attributes,請借助以下工具jq
gcloud compute instances get-guest-attributes my-instance --format json | jq -r '.[] | "\(.key) \(.value) my-server-name"' | ssh-keygen -l -f -

解釋:-r意思是--raw-outputjq-l表示用散列列出鍵。-f -表示文件來自stdin. my-server-name是出現在輸出中的可選註釋(否則你會看到no comment)。

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