支持 OS Login 证书的虚拟机支持通过 SSH 密钥和 SSH 证书进行连接。SSH 证书是指由其他受信任的密钥(在本例中为 OS Login 管理的证书授权机构)签名的 SSH 密钥。本文档介绍了如何设置 OS Login 虚拟机,以要求使用 SSH 证书进行 SSH 连接,并阻止来自未签名 SSH 密钥的连接。
当您设置 OS Login 以要求使用 SSH 证书连接到虚拟机时,只有由证书颁发机构签名的 SSH 证书才允许连接到虚拟机;来自未签名 SSH 密钥的连接将被拒绝。SSH 证书的有效期为 5 分钟,过期后将无法再用于连接虚拟机,届时必须生成新证书。
我们建议您设置 OS Login 以要求 SSH 连接使用 SSH 证书,以此作为一层额外的安全保障来防范恶意用户。SSH 证书是短期有效的,并且仅对特定虚拟机有效。这意味着,如果证书遭到破解,其攻击面和攻击窗口将比长期有效的 SSH 密钥小得多。
如果贵组织使用员工身份联合,请参阅将员工身份联合与 OS Login 搭配使用,了解如何为贵组织启用 SSH 证书。
准备工作
- 设置 OS Login 并分配 OS Login IAM 角色。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
- 您要连接的虚拟机必须具有 OpenSSH 7.4 或更高版本,才能使用 SSH 证书。
转到元数据页面。
点击修改。
点击添加项。
- 在密钥字段中,输入
enable-oslogin
。 - 在值字段中,输入
TRUE
。
- 在密钥字段中,输入
点击添加项。
- 在密钥字段中,输入
enable-oslogin-certificates
。 - 在值字段中,输入
TRUE
。
- 在密钥字段中,输入
点击保存。
转到虚拟机实例页面。
点击要为其要求使用 SSH 证书的虚拟机的名称。
点击修改。
在元数据部分,点击添加项。
- 在密钥字段中,输入
enable-oslogin
。 - 在值字段中,输入
TRUE
。
- 在密钥字段中,输入
点击添加项。
- 在密钥字段中,输入
enable-oslogin-certificates
。 - 在值字段中,输入
TRUE
。
- 在密钥字段中,输入
点击保存。
- In the Google Cloud console, go to the VM instances page.
-
In the list of virtual machine instances, click SSH in the row of
the instance that you want to connect to.
如果您还没有 SSH 密钥,请创建 SSH 密钥。
使用
projects.locations.signSshPublicKey
方法为您的 SSH 公钥签名:POST https://oslogin.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey { "ssh_public_key": "PUBLIC_KEY" "compute_instance": "COMPUTE_INSTANCE", "service_account": "SERVICE_ACCOUNT" }
替换以下内容:
PROJECT_ID
:要连接的虚拟机所属项目的项目 IDLOCATION
:要连接的虚拟机所在的区域PUBLIC_KEY
:SSH 公钥文件的内容COMPUTE_INSTANCE
:要连接到的 Compute Engine 实例,格式为projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID
。SERVICE_ACCOUNT
:关联到实例的服务账号。如果实例未关联服务账号,请删除此字段。
从
projects.locations.signSshPublicKey
方法的输出中复制 SSH 证书,并将内容保存在新文件中。运行以下命令,设置 SSH 证书文件的权限:
sudo chmod 600 FILE_NAME
将
FILE_NAME
替换为该文件的名称。使用以下命令连接到虚拟机:
ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
替换以下内容:
PATH_TO_PRIVATE_KEY
:您的 SSH 私钥文件的路径。PATH_TO_SSH_CERTIFICATE
:SSH 证书文件的路径。USERNAME
:您的 OS Login 用户名EXTERNAL_IP
:虚拟机的外部 IP 地址。
- 您的虚拟机使用的是不受支持的 OpenSSH 版本。如需解决此问题,请在实例元数据中将
enable-oslogin-certificates
设置为FALSE
,以在虚拟机的元数据中停用证书。 - 详细了解 OS Login。
- 了解如何设置 OS Login 及两步验证。
- 了解如何管理组织中的 OS Login。
限制
要求使用 SSH 证书
您可以设置 OS Login,以要求项目中的所有 OS Login 虚拟机或单个虚拟机必须使用 SSH 证书进行 SSH 连接。在您设置 OS Login 以要求使用 SSH 证书后,来自 Google Cloud 控制台和 gcloud CLI 的 SSH 连接会默认使用 SSH 证书。如果您不想设置 OS Login 以要求使用证书,但想使用证书连接到虚拟机,则必须使用第三方工具进行连接,如使用 SSH 证书连接到虚拟机部分所述。
要求项目中所有已启用 OS Login 的虚拟机都必须使用 SSH 证书
如需要求在项目中使用 OS Login 的所有虚拟机的所有连接都使用 SSH 证书,请使用 Google Cloud 控制台或 gcloud CLI。
控制台
如需要求所有与已启用 OS Login 的虚拟机建立的连接都使用 SSH 证书,请使用 Google Cloud 控制台将项目元数据中的
enable-oslogin
和enable-oslogin-certificates
设置为TRUE
:gcloud
如需要求所有与已启用 OS Login 的虚拟机建立的连接都使用 SSH 证书,请使用
gcloud compute project-info add-metadata
命令在项目元数据中设置enable-oslogin=TRUE
和enable-oslogin-certificates=TRUE
:gcloud compute project-info add-metadata \ --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE
在已启用 OS Login 的单个虚拟机上要求使用 SSH 证书
如需要求与使用 OS Login 的单个虚拟机建立的所有 SSH 连接都使用证书,请使用 Google Cloud 控制台或 gcloud CLI。
控制台
如需要求对单个虚拟机的所有连接都使用 SSH 证书,请使用Google Cloud 控制台将实例元数据中的
enable-oslogin
和enable-oslogin-certificates
设置为TRUE
:gcloud
如需要求所有连接到单个虚拟机的连接都必须使用 SSH 证书,请使用
gcloud compute instances add-metadata
命令在实例元数据中设置enable-oslogin=TRUE
和enable-oslogin-certificates=TRUE
:gcloud compute instances add-metadata VM_NAME \ --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE
将
VM_NAME
替换为虚拟机名称。使用 SSH 证书连接到虚拟机
在您设置 OS Login 以要求使用 SSH 证书后,来自 Google Cloud 控制台和 gcloud CLI 的 SSH 连接会默认使用 SSH 证书。如果您不希望设置 OS Login 以要求使用证书,但又想使用证书连接到虚拟机,则必须使用第三方工具进行连接。
控制台
通过执行以下操作,在Google Cloud 控制台中使用 SSH-in-browser 连接到虚拟机:
gcloud
使用
gcloud beta compute ssh
命令使用证书连接到虚拟机:gcloud beta compute ssh VM_NAME
将
VM_NAME
替换为要连接到的虚拟机的名称。第三方工具
如需将 SSH 证书与第三方 SSH 客户端搭配使用,请执行以下操作:
问题排查
如果您无法连接到已设置为需要 SSH 证书的虚拟机,可能是因为以下原因:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-07-11。
-