生成基于 RSA 的 SSH 密钥后:
ssh-keygen -t rsa -f ~/.ssh/id_rsa -C id_rsa
#=>
Generating public/private rsa key pair.
Created directory '/. . ./.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /. . ./.ssh/.id_rsa.
Your public key has been saved in /. . ./.ssh/.id_rsa.pub.
The key fingerprint is:
SHA256:. . . id_rsa
The key's randomart image is:
+---[RSA 3072]----+
| . . . |
+----[SHA256]-----+
我可以将其添加到我的谷歌云平台(GCP(项目的($GCP_PROJECT_NAME
(计算元数据中:
gcloud compute project-info add-metadata
--metadata-from-file ssh-keys=./.ssh/id_rsa.pub
#=>
WARNING: The following key(s) are missing the <username> at the front
ssh-rsa . . . id_rsa
Format ssh keys following https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys
Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME].
并显示警告,但无法使用它连接到 GCP 计算实例。
如果我:
pbcopy < ~/.ssh/id_rsa.pub
我将其粘贴到 GCP 控制台中,我可以使用它。
如何使用 GCP SDK (gcloud
( 完成相同的操作?
The:
警告:前面缺少以下键
警告是因为:
gcloud compute project-info add-metadata
命令要求 SSH 密钥显示为:
$USERNAME: $(cat ~/.ssh/id_rsa.pub)
而不是:
cat ~/.ssh/id_rsa.pub
如果要将基于 RSA 的 SSH 密钥添加到 Google Cloud Project (GCP( 项目 ($GCP_PROJECT_NAME
确保您以正确的用户身份登录:
gcloud config list --format="value(core.account)"
如果没有,请使用以下方法登录:
gcloud auth login
确保您已通过以下方式连接到
$GCP_PROJECT_NAME
:gcloud config list --format="value(core.project)"
如果没有,请使用以下命令切换到
$GCP_PROJECT_NAME
:gcloud config set project $GCP_PROJECT_NAME
确保基于 RSA 的密钥的公钥和私钥文件仍然存在:
ls -1 ~/.ssh/id_rsa* #=> /. . ./id_rsa /. . ./id_rsa.pub
使用以下命令检查所有项目范围的 SSH 密钥
$GCP_PROJECT_NAME
:gcloud compute project-info describe --format=json #=> { "commonInstanceMetadata": { . . . "items": [ . . . { "key": "ssh-keys", "value": ". . ." }, . . . ], . . . } . . . }
利用可用于
gcloud
的filter()
和firstof()
转换,我们能够只获取那些项目范围的SSH密钥:gcloud compute project-info describe --format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))"
如果我们想避免生成临时文件,并且只使用单个命令将基于 RSA 的 SSH 密钥添加到
$GCP_PROJECT_NAME
:gcloud compute project-info add-metadata --metadata ssh-keys="$(gcloud compute project-info describe --format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))") $(whoami):$(cat ~/.ssh/id_rsa.pub)" #=> Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME].
您现在应该看到基于 RSA 的 SSH 密钥现在在
$GCP_PROJECT_NAME
中;请检查:gcloud compute project-info describe --format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))"
注意:我建议使用基于 Ed25519 的 SSH 密钥而不是基于 RSA 的 SSH 密钥:
ssh-keygen -t ed25519 -C "$(whoami)@$(hostname)"
#=>
Generating public/private ed25519 key pair.
Enter file in which to save the key (/. . ./.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ed25519.
Your public key has been saved in id_ed25519.pub.
The key fingerprint is:
SHA256:. . . "$(whoami)@$(hostname)"
The key's randomart image is:
+--[ED25519 256]--+
| . . . |
+----[SHA256]-----+
将 ssh 键添加到元数据并扩展@guillaume以显示包含所有繁琐位的特定工作示例
1 获取现有实例元数据
gcloud compute instances describe <instance name>
2 复制 ssh 密钥元数据值下的公有 SSH 密钥
3 创建文件并包含步骤 2 中的密钥
4'将密钥添加到实例
gcloud compute instances add-metadata cos-test --metadata-from-file ssh-keys=<file from step 2>
步骤 2 中的文件应如下所示
<user name>:ssh-rsa <long string of key data> <user name>
在带有 Open-SSH 的 Linux 发行版上,我们将使用
ssh-keygen -t rsa -f ~/.ssh/<key name> -C <user name>
对为什么 gCloud 想要用户名 pre/appended感到困惑,Gcloud 将根据附加的用户名和密钥创建一个远程用户和主目录。当您登录时,您需要记住这一点,例如
ssh -v -i <path to your private key> <username>@<public ip>
您可以使用gcloud命令添加和删除SSH密钥。但是,如果要将 ssh 密钥添加到现有密钥,则需要脚本。
如文档中所述,如果 VM 元数据上存在现有密钥,则必须恢复它们,添加新密钥并将整个包设置为 VM 元数据。