与 Linux 虚拟机的 SSH 连接


Compute Engine 使用基于密钥的 SSH 身份验证建立与 Linux 虚拟机实例的连接。默认情况下,Linux 虚拟机上未配置使用密码的本地用户。

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

元数据管理的 SSH 连接

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

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

控制台

  1. 使用 Google Cloud Console 中的 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 密钥和用户名,使用该用户名和公钥创建一个用户账号,并将公钥存储在虚拟机上您用户的 ~/.ssh/authorized_keys 文件中。
  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 密钥和用户名,使用该用户名和公钥创建一个用户账号,并将公钥存储在虚拟机上您用户的 ~/.ssh/authorized_keys 文件中。
  5. Compute Engine 允许连接。

第三方工具

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

OS Login 管理的 SSH 连接

启用 OS Login 后,Compute Engine 会拒绝来自存储在元数据中的 SSH 密钥的连接。

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

控制台

  1. 使用 Google Cloud Console 中的 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 密钥的有效期为 5 分钟。在 Compute Engine 创建密钥 5 分钟后,您无法再使用该 SSH 密钥连接到虚拟机。
  3. Compute Engine 使用 NSS 服务模块将您提供的用户名解析为虚拟机中的 OS Login 帐号。
  4. Compute Engine 使用 PAM 配置执行 IAM 授权,以确保您拥有连接所需的权限。
  5. Compute Engine 从您的用户帐号中检索 SSH 密钥,并使用 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 使用 PAM 配置执行 IAM 授权,以确保您拥有连接所需的权限。
  5. Compute Engine 从您的用户帐号中检索 SSH 密钥,并使用 SSH 授权的密钥命令将其提供给虚拟机中的 OpenSSH。
  6. Compute Engine 允许连接。

第三方工具

  1. 您创建 SSH 密钥对。如需了解详情,请参阅创建新的 SSH 密钥
  2. 您将 SSH 公钥上传到 OS Login 配置文件中。如需了解详情,请参阅将 SSH 密钥添加到用户帐号
    • 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 使用 PAM 配置执行 IAM 授权,以确保您拥有连接所需的权限。
  7. Compute Engine 从您的用户帐号中检索 SSH 密钥,并使用 SSH 授权的密钥命令将其提供给虚拟机中的 OpenSSH。
  8. Compute Engine 允许连接。

后续步骤