关于 SSH 连接


Compute Engine 使用基于密钥的 SSH 身份验证建立与所有 Linux 虚拟机 (VM) 实例的连接。您可以选择为 Windows 虚拟机启用 SSH。默认情况下,系统不会为 Linux 虚拟机上的本地用户配置密码。

您必须先进行一些配置,然后才能连接到虚拟机。如果您使用 Google Cloud 控制台或 Google Cloud CLI 连接到虚拟机,Compute Engine 会代表您执行这些配置。 Compute Engine 会根据您用于连接的工具以及您是通过元数据还是 OS Login 管理对虚拟机的访问权限来执行不同的配置。OS Login 仅适用于 Linux 虚拟机。

元数据管理的 SSH 连接

默认情况下,Compute Engine 使用自定义项目和/或实例元数据来配置 SSH 密钥和管理 SSH 访问权限。 所有 Windows 虚拟机都使用元数据来管理 SSH 密钥,而 Linux 虚拟机可以使用元数据密钥或 OS Login。如果您使用 OS Login,元数据 SSH 密钥会被停用。

点击各个标签页可详细了解使用 Google Cloud 控制台、gcloud CLI 或第三方工具连接到虚拟机时,Compute Engine 在允许 SSH 连接之前执行的配置。如果您不使用 Google Cloud 控制台或 gcloud CLI 连接虚拟机,则必须自行执行一些配置。

控制台

  1. 使用 Google Cloud 控制台中的 SSH 按钮连接到虚拟机
  2. Compute Engine 按照以下配置设置用户名并创建临时 SSH 密钥对:
    • 您的用户名将设置为您的 Google 账号中的用户名。例如,如果与您的 Google 账号关联的电子邮件地址是 cloudysanfrancisco@gmail.com,则您的用户名为 cloudysanfrancisco
    • 您的 SSH 公钥和私钥存储在浏览器会话中。
    • SSH 密钥的有效期为 5 分钟。在 Compute Engine 创建密钥 5 分钟后,您无法再使用该 SSH 密钥连接到虚拟机。
  3. Compute Engine 将 SSH 公钥和用户名上传到元数据。
  4. Compute Engine 从元数据中检索 SSH 密钥和用户名,使用该用户名创建一个用户账号,并在 Linux 虚拟机上将公钥存储在虚拟机上您用户的 ~/.ssh/authorized_keys 文件中。在 Windows 虚拟机上,Compute Engine 不会将公钥存储在虚拟机上。
  5. Compute Engine 允许连接。

gcloud

  1. 使用 gcloud compute ssh 命令连接到虚拟机
  2. Compute Engine 按照以下配置设置用户名并创建永久 SSH 密钥对:
    • 您的用户名设置为本地机器中的用户名。
    • 您的 SSH 公钥存储在项目元数据中。如果 Compute Engine 无法将 SSH 密钥存储在项目元数据中(例如,由于 block-project-ssh-keys 设置为 TRUE),则 Compute Engine 会将 SSH 密钥存储在实例元数据中。
    • 您的 SSH 私钥存储在本地机器上。
    • SSH 密钥没有到期时间。除非您配置新密钥,否则这一密钥将用于您以后发起的所有 SSH 连接。
  3. Compute Engine 将 SSH 公钥和用户名上传到元数据。
  4. Compute Engine 从元数据中检索 SSH 密钥和用户名,使用该用户名创建一个用户账号,并在 Linux 虚拟机上将公钥存储在虚拟机上您用户的 ~/.ssh/authorized_keys 文件中。在 Windows 虚拟机上,Compute Engine 不会将公钥存储在虚拟机上。
  5. Compute Engine 允许连接。

第三方工具

  1. 您创建 SSH 密钥对和用户名。如需了解详情,请参阅创建 SSH 密钥
  2. 您将公钥和用户名上传到元数据。如需了解详情,请参阅将 SSH 密钥添加到使用基于元数据的 SSH 密钥的虚拟机
  3. 您连接到虚拟机。
  4. Compute Engine 从元数据中检索 SSH 密钥和用户名,使用该用户名创建一个用户账号,并在 Linux 虚拟机上将公钥存储在虚拟机上您用户的 ~/.ssh/authorized_keys 文件中。在 Windows 虚拟机上,Compute Engine 不会将公钥存储在虚拟机上。
  5. Compute Engine 允许连接。

OS Login 管理的 SSH 连接

设置 OS Login 元数据时,Compute Engine 会删除虚拟机的 authorized_keys 文件,并且不再接受来自项目或实例元数据中存储的 SSH 密钥的连接。

点击各个标签页可详细了解使用 Google Cloud 控制台、gcloud CLI 或第三方工具连接到虚拟机时,Compute Engine 在允许 SSH 连接之前执行的配置。如果您不使用 Google Cloud 控制台或 gcloud CLI 连接虚拟机,则必须自行执行一些配置。

控制台

  1. 使用 Google Cloud 控制台中的 SSH 按钮连接到虚拟机
  2. Compute Engine 按照以下配置设置用户名并创建临时 SSH 密钥对:
    • 您的用户名是您组织的 Cloud Identity 或 Google Workspace 管理员设置的用户名。如果您的组织没有为您配置用户名,或者您的项目不属于任何组织,Compute Engine 会使用您的 Google 账号电子邮件地址,格式如下:

      USERNAME_DOMAIN_SUFFIX
      例如,如果与您的 Google 账号关联的电子邮件地址是 cloudysanfrancisco@gmail.com,则生成的用户名为 cloudysanfrancisco_gmail_com

    • 您的 SSH 公钥存储在浏览器会话和 Google 账号中。
    • 您的 SSH 私钥存储在浏览器会话中。
    • SSH 密钥的有效期为 3 分钟。在 Compute Engine 创建密钥 3 分钟后,您无法再使用该 SSH 密钥连接到虚拟机。
  3. Compute Engine 使用 NSS 服务模块将您提供的用户名解析为虚拟机中的 OS Login 账号。
  4. Compute Engine 使用 AuthorizedKeysCommand 执行 IAM 授权,以确保您拥有连接所需的权限。
  5. AuthorizedKeysCommand 会从您的用户账号中检索 SSH 密钥,并将其提供给虚拟机中的 OpenSSH。
  6. Compute Engine 允许连接。

gcloud

  1. 使用 gcloud compute ssh 命令连接到虚拟机
  2. Compute Engine 按照以下配置设置用户名并创建永久 SSH 密钥对:
    • 您的用户名是您组织的 Cloud Identity 或 Google Workspace 管理员设置的用户名。如果您的组织没有为您配置用户名,Compute Engine 会使用您的 Google 账号电子邮件地址,格式如下:

      USERNAME_DOMAIN_SUFFIX
      例如,如果与您的 Google 账号关联的电子邮件地址是 cloudysanfrancisco@gmail.com,则生成的用户名为 cloudysanfrancisco_gmail_com

    • 您的 SSH 公钥存储在您的 Google 账号中。
    • 您的 SSH 私钥存储在本地机器的 google_compute_engine 文件中。
    • SSH 密钥没有到期时间。除非您配置新密钥,否则这一密钥将用于您以后发起的所有 SSH 连接。
  3. Compute Engine 使用 NSS 服务模块将您提供的用户名解析为虚拟机中的 OS Login 账号。
  4. Compute Engine 使用 AuthorizedKeysCommand 执行 IAM 授权,以确保您拥有连接所需的权限。
  5. AuthorizedKeysCommand 会从您的用户账号中检索 SSH 密钥,并将其提供给虚拟机中的 OpenSSH。
  6. Compute Engine 允许连接。

第三方工具

  1. 您创建 SSH 密钥对。如需了解详情,请参阅创建 SSH 密钥
  2. 您将 SSH 公钥上传到 OS Login 配置文件中。如需了解详情,请参阅将密钥添加到使用 OS Login 的虚拟机
    • Compute Engine 将您的密钥存储在您的 Google 账号中。
    • Compute Engine 使用默认格式配置用户名:
          USERNAME_DOMAIN_SUFFIX
      例如,如果与您的 Google 账号关联的电子邮件地址是 cloudysanfrancisco@gmail.com,则生成的用户名为 cloudysanfrancisco_gmail_com
  3. (可选)您使用 Google Workspace Admin SDK Directory API 设置用户名。
  4. 您连接到虚拟机。
  5. Compute Engine 使用 NSS 服务模块将您提供的用户名解析为虚拟机中的 OS Login 账号。
  6. Compute Engine 使用 AuthorizedKeysCommand 执行 IAM 授权,以确保您拥有连接所需的权限。
  7. AuthorizedKeysCommand 会从您的用户账号中检索 SSH 密钥,并将其提供给虚拟机中的 OpenSSH。
  8. Compute Engine 允许连接。

后续步骤