本文档介绍如何通过移除和屏蔽来自虚拟机的 SSH 密钥来阻止用户访问虚拟机 (VM) 实例。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Trusted Cloud by S3NS 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.
gcloud
-
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
- Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
如需了解详情,请参阅 Trusted Cloud 身份验证文档中的使用 REST 时进行身份验证。
移除 SSH 密钥
您可以使用Trusted Cloud 控制台、gcloud CLI 或 Compute Engine API 从项目或实例元数据中移除 SSH 公钥。
从特定用户的元数据中移除最后一个键或者特定用户的元数据中的最后一个键过期后,Compute Engine 会删除该用户的虚拟机上的
~/.ssh/authorized_keys
文件。从项目元数据中移除公钥
从项目元数据中移除 SSH 公钥,以移除对项目中所有虚拟机的访问权限。
使用 gcloud CLI 和 Compute Engine API 从元数据中移除密钥时,您必须检索现有密钥列表,修改密钥列表以移除不需要的密钥,并使用您要保留的密钥列表覆盖旧密钥,如以下部分所述。
控制台
如需使用Trusted Cloud 控制台从项目元数据中移除 SSH 公钥,请执行以下操作:
在 Trusted Cloud 控制台中,前往元数据页面。
点击 SSH 密钥标签页。
点击页面顶部的
修改。找到您要移除的 SSH 密钥,然后点击该 SSH 密钥旁边的
删除按钮。对您要移除的每个 SSH 密钥重复执行此步骤。
点击保存。
gcloud
如需使用 gcloud CLI 从项目元数据中移除 SSH 公钥,请执行以下操作:
运行
gcloud compute project-info describe
命令以获取项目的元数据:gcloud compute project-info describe
输出内容类似如下:
... 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
元数据值。在工作站上创建并打开一个新的文本文件。
在该文件中,粘贴您刚刚复制的 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 密钥)
REST
如需使用 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"}" } ] ...
复制 SSH 密钥值列表并删除要移除的密钥。
使用
projects.setCommonInstanceMetadata
移除 SSH 密钥。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata { "items": [ { "key": "ssh-keys", "value": "EXISTING_SSH_KEYS" } ] "fingerprint": "FINGERPRINT" }
替换以下内容:
PROJECT_ID
:您的项目 IDEXISTING_SSH_KEYS
:您要保留的 SSH 密钥列表FINGERPRINT
:projects.get
请求的响应中的fingerprint
的值
从实例元数据中移除 SSH 公钥
从实例元数据中移除 SSH 公钥,以移除对单个虚拟机的访问权限。
使用 gcloud CLI 和 Compute Engine API 从元数据中移除密钥时,您必须检索现有密钥列表,修改密钥列表以移除不需要的密钥,并使用您要保留的密钥列表覆盖旧密钥,如以下部分所述。
控制台
如需使用Trusted Cloud 控制台从实例元数据中移除 SSH 公钥,请执行以下操作:
在 Trusted Cloud 控制台中,前往虚拟机实例页面。
点击要为其移除密钥的虚拟机的名称。
点击修改。
在 SSH 密钥部分,点击显示和修改。该部分随即展开,显示所有实例级 SSH 公钥。
点击您要移除的 SSH 密钥旁边的
删除按钮。对您要移除的每个 SSH 密钥重复执行此步骤。
点击保存。
gcloud
如需使用 gcloud CLI 从实例元数据中移除 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
元数据值。在本地工作站上创建并打开一个新的文本文件。
在该文件中,粘贴您刚刚复制的 SSH 密钥列表,然后移除要删除的所有密钥。
保存并关闭文件。
运行
gcloud compute project-info add-metadata
命令以设置项目范围的ssh-keys
值:gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
替换以下内容:
VM_NAME
:您要移除其 SSH 密钥的虚拟机KEY_FILE
:包含所有项目 SSH 密钥列表的文件的路径
REST
如需使用 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"}" } ] ...
复制 SSH 密钥值列表并删除要移除的密钥。
使用
instances.setMetadata
移除 SSH 密钥。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "items": [ { "key": "ssh-keys", "value": "EXISTING_SSH_KEYS } ] "fingerprint": "FINGERPRINT" }
替换以下内容:
PROJECT_ID
:您的项目 IDEXISTING_SSH_KEYS
:projects.get
请求的响应中的ssh-keys
键的值FINGERPRINT
:instances.get
请求的响应中的fingerprint
的值
屏蔽使用基于元数据的 SSH 密钥的虚拟机的项目 SSH 密钥
您可以通过阻止来自虚拟机的项目 SSH 密钥,阻止虚拟机接受存储在项目元数据中的 SSH 密钥。 您可以在创建虚拟机时或者创建虚拟机后屏蔽来自虚拟机的项目 SSH 密钥。
在虚拟机创建的过程中阻止来自虚拟机的项目 SSH 密钥
您可以在虚拟机的创建过程中使用Trusted Cloud 控制台、gcloud CLI 或 Compute Engine API 阻止来自虚拟机的项目 SSH 密钥。
控制台
如需使用 Trusted Cloud 控制台创建实例并阻止其接受存储在项目元数据中的 SSH 密钥,请执行以下操作:
在 Trusted Cloud 控制台中,前往创建实例页面。
如需屏蔽项目 SSH 密钥,请执行以下操作:
在导航菜单中,点击安全。
展开管理访问权限部分。
如需停用 OS Login,请清除通过 IAM 权限控制虚拟机访问权限复选框。
选中屏蔽项目范围的 SSH 密钥复选框。
可选:指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项。
要创建并启动该实例,请点击创建。
gcloud
如需使用 gcloud CLI 创建虚拟机并阻止其接受存储在项目元数据中的 SSH 密钥,请使用
gcloud compute instances create
命令:gcloud compute instances create VM_NAME \ --metadata block-project-ssh-keys=TRUE
将
VM_NAME
替换为新虚拟机的名称。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": "block-project-ssh-keys", "value": TRUE } ] } ...
在虚拟机创建之后阻止来自虚拟机的项目 SSH 密钥
您可以在创建虚拟机后使用Trusted Cloud 控制台、gcloud CLI 或 Compute Engine API 阻止来自虚拟机的项目 SSH 密钥。
控制台
如需使用 Trusted Cloud 控制台阻止虚拟机接受存储在项目元数据中的 SSH 密钥的连接,请执行以下操作:
在 Trusted Cloud 控制台中,前往虚拟机实例页面。
点击要为其屏蔽项目 SSH 密钥的虚拟机的名称。
点击修改。
在 SSH 密钥下,选中屏蔽项目范围的 SSH 密钥复选框。
修改完 SSH 密钥的连接设置后,点击保存。
gcloud
如需使用 gcloud CLI 阻止虚拟机接受存储在项目元数据中的 SSH 密钥的连接,请执行以下操作:
运行
gcloud compute instances add-metadata
命令:gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE
将
VM_NAME
替换为要针对其屏蔽项目范围的 SSH 公钥的虚拟机名称。REST
如需使用 Compute Engine API 阻止虚拟机接受存储在项目元数据中的 SSH 密钥的连接,请执行以下操作:
使用
instances.get
方法从元数据中获取fingerprint
。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=" ...
使用
instances.setMetadata
方法将block-project-ssh-keys
设置为TRUE
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "items": [ { "key": "block-project-ssh-keys", "value": TRUE } ] "fingerprint": "FINGERPRINT" }
替换以下内容:
PROJECT_ID
是项目 IDZONE
是实例所在的可用区INSTANCE_NAME
是您要屏蔽的项目范围的密钥实例。FINGERPRINT
:instances.get
请求的响应中的fingerprint
的值。
后续步骤
- 使用 Google 工具连接到虚拟机,因此您无需管理自己的 SSH 密钥。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-09-19。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-09-19。"],[],[],null,[]] -