向虚拟机添加 SSH 密钥 (original) (raw)
Linux Windows
本文档介绍了如何将 SSH 密钥添加到使用 OS Login 的虚拟机 (VM) 实例和使用基于元数据的 SSH 密钥的虚拟机。如果您或您的组织管理员尚未启用 OS Login,则虚拟机将使用基于元数据的 SSH 密钥。
准备工作
- 如需了解如何管理对 Compute Engine 虚拟机的访问权限,请参阅选择访问方法。
- 如果您尚未创建 SSH 密钥对,请创建 SSH 密钥对。
- 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
- Install the Google Cloud CLI, theninitialize it by running the following command:
gcloud init - Set a default region and zone.
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
1. Install the Google Cloud CLI.
2. To initialize the gcloud CLI, run the following command:
gcloud init
3. If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Set up authentication for a local development environment。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, theninitialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
将密钥添加到使用 OS Login 的虚拟机
使用 OS Login 的虚拟机接受与您的 Google 账号关联的 SSH 密钥。您可以使用 gcloud CLI 或使用 OS Login API 将 SSH 公钥与您的 Google 账号相关联。如果您是组织的管理员,则可以使用 Directory API 将 SSH 密钥添加到用户账号。
将 SSH 密钥添加到 Google 账号时,Compute Engine 会通过组合与您的 Google 账号关联的电子邮件中的用户名和域名来为您生成用户名。例如,如果您的电子邮件地址是 cloudysanfrancisco@gmail.com
,则用户名为 cloudysanfrancisco_gmail_com
。如果您在组织外部的项目中添加 SSH 密钥,则用户名带有 ext_
前缀,例如 ext_cloudysanfrancisco_gmail_com
。您的组织管理员可以使用 Directory API 自定义您的用户名。如果您已配置用户名,则 Compute Engine 会在您添加 SSH 密钥时使用该用户名。
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
- Compute OS Login External User 角色中的所有权限(如果您在组织外部的项目中添加一个 SSH 密钥)。
gcloud
- In the Google Cloud console, activate Cloud Shell.
Activate Cloud Shell
At the bottom of the Google Cloud console, aCloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. - 如需向账号添加 SSH 公钥,请使用 gcloud compute os-login ssh-keys add 命令:
gcloud compute os-login ssh-keys add \
--key-file=KEY_FILE_PATH \
--project=PROJECT \
--ttl=EXPIRE_TIME
替换以下内容:KEY_FILE_PATH
:指向工作站上 SSH 公钥的路径。密钥必须使用public-openssh
格式PROJECT
(可选):您打算在其中使用 SSH 密钥的项目。指定此字段以在组织外部的项目中使用 SSH 密钥,否则您不是 Cloud Identity 组织的成员EXPIRE_TIME
(可选):SSH 密钥的到期时间
例如,如果您指定30m
,则 SSH 密钥会在 30 分钟后到期。
此标志使用下列单位:
*s
表示秒数
*m
表示分钟数
*h
表示小时数
*d
表示天数
Terraform
如需向账号添加 SSH 公钥,请使用 google_client_openid_userinfo 资源以及 google_os_login_ssh_public_key 资源。
REST
如需向账号添加 SSH 公钥,请使用 OS Login API users.importSshPublicKey 方法:
POST https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL:importSshPublicKey
{ "key": "SSH_KEY", "expirationTimeUsec": "EXPIRATION_TIMESTAMP" }
替换以下内容:
ACCOUNT_EMAIL
:查看与您的账号关联的电子邮件地址SSH_KEY
:您想要添加到账号的公钥EXPIRATION_TIMESTAMP
:密钥的到期时间(以微秒为单位,从新纪元开始计算)(1 秒 = 106 微秒)
不使用 OS Login的虚拟机会将 SSH 密钥存储在 Compute Engine 项目和实例元数据中。如果为虚拟机启用了 OS Login,则虚拟机的客户机代理会忽略存储在元数据中的密钥。
您可以使用存储在项目元数据中的 SSH 密钥来访问项目中的所有虚拟机。您可以使用存储在实例元数据中的 SSH 密钥来访问各个虚拟机。
Compute Engine 不会在 SSH 密钥过期时自动从元数据中移除过期的 SSH 密钥,但过期密钥不能用于建立新的虚拟机连接。如果要从元数据中移除过期密钥,请参阅从使用基于元数据的密钥的虚拟机中移除 SSH 密钥。
您可以使用 Google Cloud 控制台、gcloud CLI 或 REST 将 SSH 公钥添加到项目或虚拟机实例元数据中。
将 SSH 密钥添加到项目元数据中
您可以向项目元数据添加 SSH 公钥,以访问项目中的所有虚拟机(屏蔽项目范围 SSH 密钥的虚拟机除外)。如需详细了解如何屏蔽项目范围的 SSH 密钥,请参阅在使用基于元数据的 SSH 密钥的虚拟机中屏蔽 SSH 密钥。
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
- 针对项目的
compute.projects.setCommonInstanceMetadata
。 - 项目的
iam.serviceAccounts.actAs
权限。如需详细了解服务账号权限,请参阅服务账号身份验证角色。
控制台
如需使用Google Cloud 控制台向项目元数据添加 SSH 公钥,请执行以下操作:
- 在 Google Cloud 控制台中,前往元数据页面。
转到元数据 - 点击 SSH 密钥标签页。
- 点击修改。
- 点击添加项。
- 在打开的 SSH 密钥字段中,添加您的 SSH 公钥。密钥必须采用以下格式之一:
- 没有到期时间的密钥格式:
KEY_VALUE USERNAME - 具有到期时间的密钥格式:
KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容: KEY_VALUE
:SSH 公钥值USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到 Linux 虚拟机。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
- 没有到期时间的密钥格式:
- 点击保存。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, aCloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- 如果项目元数据中存在现有 SSH 密钥,则每次使用 gcloud CLI 添加新的 SSH 密钥时,都必须将这些密钥重新添加到项目元数据中。如果您不重新添加现有密钥,则添加新密钥会清空现有密钥。
如需使用 gcloud CLI 向项目元数据添加 SSH 公钥,请执行以下操作:- 如果您的项目已具有项目范围的 SSH 公钥,请从元数据中获取这些密钥,并将其添加到新文件中:
- 运行 gcloud compute project-info describe 命令以获取项目的 SSH 密钥:
gcloud compute project-info describe \
--format="value(commonInstanceMetadata[items][ssh-keys])"
输出类似于以下内容:
username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... - 复制
ssh-keys
元数据值。 - 在工作站上创建并打开一个新的文本文件。
- 在该文件中,粘贴您刚刚复制的密钥列表。
- 使用以下格式之一在列表末尾添加新密钥:
* 没有到期时间的密钥格式:
USERNAME:KEY_VALUE
* 具有到期时间的密钥格式:
USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容:
*KEY_VALUE
:SSH 公钥值
*USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到实例。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。
*EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
6. 保存并关闭文件。 - 运行 gcloud compute project-info describe 命令以获取项目的 SSH 密钥:
- 运行
gcloud compute project-info add-metadata
命令来设置项目范围的ssh-keys
值:
gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
将KEY_FILE
替换为以下项之一:- 您在上一步中创建的文件的路径(如果项目已有 SSH 密钥)
- 新建 SSH 公钥文件的路径(如果项目还没有 SSH 密钥)
- 如果您的项目已具有项目范围的 SSH 公钥,请从元数据中获取这些密钥,并将其添加到新文件中:
Terraform
如需向项目元数据添加 SSH 公钥,请使用 google_compute_project_metadata 资源。
REST
如果项目元数据中存在现有 SSH 密钥,则每次使用 Compute Engine API 添加新的 SSH 密钥时,都必须将这些密钥重新添加到项目元数据中。如果您不重新添加现有密钥,则添加新密钥会清空现有密钥。
如需使用 Compute Engine API 向项目元数据添加 SSH 公钥,请执行以下操作:
- 使用 projects.get 方法从元数据获取
fingerprint
和ssh-keys
值
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
将PROJECT_ID
替换为您的项目 ID。
响应类似于以下示例:
...
"fingerprint": "utgYE_XWtE8=",
"items": [
{
"key": "ssh-keys",
"value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
}
]
... - 使用 projects.setCommonInstanceMetadata 方法添加新的
ssh-keys
值。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
{
"items": [
{
"key": "ssh-keys",
"value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
}
]
"fingerprint": "FINGERPRINT"
}
替换以下内容:PROJECT_ID
:您的项目 IDEXISTING_SSH_KEYS
:projects.get
请求的响应中的ssh-keys
键的值FINGERPRINT
:projects.get
请求的响应中的fingerprint
的值NEW_SSH_KEY
:新 SSH 密钥,格式如下:
* 没有到期时间的密钥格式:
USERNAME:KEY_VALUE
* 具有到期时间的密钥格式:
USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容:
*KEY_VALUE
:SSH 公钥值
*USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到实例。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。
*EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
将 SSH 密钥添加到实例元数据
您可以在创建虚拟机时或在创建虚拟机后向实例元数据添加 SSH 公钥。
在创建虚拟机期间向实例元数据添加 SSH 密钥
您可以在创建虚拟机期间使用Google Cloud 控制台、gcloud CLI 或 Compute Engine API 将 SSH 密钥添加到实例元数据。
控制台
如需使用 Google Cloud 控制台创建实例并同时向实例元数据添加 SSH 公钥,请执行以下操作:
- 在 Google Cloud 控制台中,前往创建实例页面。
转到“创建实例” - 如需向实例元数据添加 SSH 公钥,请执行以下操作:
- 在导航菜单中,点击安全。
- 展开管理访问权限部分。
- 如需停用 OS Login,请清除通过 IAM 权限控制虚拟机访问权限复选框。
- 如果您希望允许项目元数据中的 SSH 公钥访问实例,请取消选中屏蔽项目范围的 SSH 密钥复选框。
- 在添加手动生成的 SSH 密钥部分中,点击添加项目。
- 在文本框中添加公钥。秘钥必须采用以下格式之一:
- 没有到期时间的密钥格式:
KEY_VALUE USERNAME - 具有到期时间的密钥格式:
KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容: KEY_VALUE
:SSH 公钥值USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到 Linux 虚拟机。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
- 没有到期时间的密钥格式:
- 可选:指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项。
- 要创建并启动该实例,请点击创建。
gcloud
- In the Google Cloud console, activate Cloud Shell.
Activate Cloud Shell
At the bottom of the Google Cloud console, aCloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. - 要使用 gcloud CLI 创建虚拟机并同时向实例元数据添加 SSH 公钥,请使用 gcloud compute instances create 命令:
gcloud compute instances create VM_NAME \
--metadata=ssh-keys=PUBLIC_KEY
替换以下内容:VM_NAME
:新虚拟机的名称PUBLIC_KEY
:您的 SSH 公钥,格式如下:
* 没有到期时间的密钥格式:
USERNAME:KEY_VALUE
* 具有到期时间的密钥格式:
USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容:
*KEY_VALUE
:SSH 公钥值
*USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到实例。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。
*EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
您可以使用 --metadata-from-file=ssh-keys=FILE_PATH
标志添加多个 SSH 密钥。在该文件中,添加采用上述格式之一的用户名和 SSH 公钥列表。
Terraform
如需向实例元数据添加 SSH 公钥,请使用 google_compute_instance 资源。
REST
如需创建虚拟机并且同时使用 Compute Engine 向实例元数据添加 SSH 公钥,请构建一个向 instances.insert 方法发出的 POST
请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
替换以下内容:
PROJECT_ID
:项目 IDZONE
:虚拟机所在的区域
在请求正文中,在 items
属性中提供用户名和 SSH 公钥:
... { "items": [ { "key": "ssh-keys", "value": "PUBLIC_KEY" } ] } ...
将 PUBLIC_KEY
替换为您的公钥,采用以下格式之一:
- 没有到期时间的密钥格式:
USERNAME:KEY_VALUE - 具有到期时间的密钥格式:
USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容:
KEY_VALUE
:SSH 公钥值USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到实例。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
您可以通过在密钥之间添加 \n
来添加多个 SSH 密钥。
创建虚拟机后,将 SSH 密钥添加到实例元数据
您可以在创建虚拟机后使用Google Cloud 控制台、gcloud CLI 或 Compute Engine API 将 SSH 密钥添加到实例元数据。
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
- 针对虚拟机的
compute.instances.setMetadata
权限
控制台
如需使用Google Cloud 控制台向实例元数据添加 SSH 公钥,请执行以下操作:
- 在 Google Cloud 控制台中,前往虚拟机实例页面。
转到“虚拟机实例” - 点击要为其添加 SSH 密钥的虚拟机的名称。
- 点击修改。
- 在 SSH 密钥下,点击添加项目。
- 将您的公钥添加到文本框中。密钥必须采用以下格式之一:
- 没有到期时间的密钥格式:
KEY_VALUE USERNAME - 具有到期时间的密钥格式:
KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容: KEY_VALUE
:SSH 公钥值USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到 Linux 虚拟机。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
- 没有到期时间的密钥格式:
- 点击保存。
gcloud
- In the Google Cloud console, activate Cloud Shell.
Activate Cloud Shell
At the bottom of the Google Cloud console, aCloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. - 如果实例元数据中存在现有 SSH 密钥,则每次使用 gcloud CLI 添加新的 SSH 密钥时,都必须将这些密钥重新添加到实例元数据中。如果您不重新添加现有密钥,则添加新密钥会清空现有密钥。
如需使用 gcloud CLI 向实例元数据添加 SSH 公钥,请执行以下操作:- 如果您的虚拟机已具有实例级 SSH 公钥,请从元数据中获取它们,并将其添加到新文件中:
- 运行 gcloud compute instances describe 命令以获取虚拟机的元数据:
gcloud compute instances describe VM_NAME
将 VM_NAME 替换为需要添加或移除 SSH 公钥的虚拟机的名称。
输出类似于以下内容:
...
metadata:
...
- key: ssh-keys
value: |-
cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...
baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
... - 复制
ssh-keys
元数据值。 - 在工作站上创建并打开一个新的文本文件。
- 在该文件中,粘贴您刚刚复制的密钥列表。
- 使用以下格式之一在列表末尾添加新密钥:
- 没有到期时间的密钥格式:
USERNAME:KEY_VALUE - 具有到期时间的密钥格式:
USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容: KEY_VALUE
:SSH 公钥值USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到实例。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
- 保存并关闭文件。
- 运行 gcloud compute instances describe 命令以获取虚拟机的元数据:
- 运行
gcloud compute instances add-metadata
命令以设置ssh-keys
值:
gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
替换以下内容:VM_NAME
:您要为其添加 SSH 密钥的虚拟机- 将
KEY_FILE
替换为以下项之一: - 您在上一步中创建的文件的路径(如果虚拟机已有 SSH 密钥)
- 新建 SSH 公钥文件的路径(如果虚拟机还没有 SSH 密钥)
- 如果您的虚拟机已具有实例级 SSH 公钥,请从元数据中获取它们,并将其添加到新文件中:
REST
如果实例元数据中存在现有 SSH 密钥,则每次使用 Compute Engine API 工具添加新的 SSH 密钥时,都必须将这些密钥重新添加到实例元数据中。如果您不重新添加现有密钥,则添加新密钥会清空现有密钥。
如需使用 Compute Engine API 向实例元数据添加 SSH 公钥,请执行以下操作:
- 使用 instances.get 方法从元数据获取
fingerprint
和ssh-keys
值。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
替换以下内容:PROJECT_ID
:您的项目 IDZONE
:要添加 SSH 密钥的虚拟机所在的可用区VM_NAME
:您要为其添加 SSH 密钥的虚拟机
响应类似于以下示例:
...
"fingerprint": "utgYE_XWtE8=",
"items": [
{
"key": "ssh-keys",
"value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
}
]
...
- 使用 instances.setMetadata 方法添加新的
ssh-keys
值。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
{
"items": [
{
"key": "ssh-keys",
"value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
}
]
"fingerprint": "FINGERPRINT"
}
替换以下内容:PROJECT_ID
:您的项目 IDEXISTING_SSH_KEYS
:instances.get
请求的响应中的ssh-keys
键的值FINGERPRINT
:projects.get
请求的响应中的fingerprint
NEW_SSH_KEY
:新 SSH 密钥,格式如下:
* 没有到期时间的密钥格式:
USERNAME:KEY_VALUE
* 具有到期时间的密钥格式:
USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}
替换以下内容:
*KEY_VALUE
:SSH 公钥值
*USERNAME
:您的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。
对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到实例。
对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。
*EXPIRE_TIME
:密钥的到期时间,采用 ISO 8601 格式。例如:2021-12-04T20:12:00+0000
后续步骤
- 了解如何连接到虚拟机。
- 了解如何管理对虚拟机的访问权限。
- 了解如何将文件传输到虚拟机。
- 了解与 Linux 虚拟机的 SSH 连接在 Compute Engine 上的工作原理。