使用 Identity-Aware Proxy 连接到 Linux 虚拟机


本文档介绍如何使用 Identity-Aware Proxy (IAP) TCP 转发通过内部 IP 地址连接到虚拟机 (VM) 实例。

IAP TCP 转发允许您建立加密隧道,通过该隧道可以将 SSH 连接转发到虚拟机。连接到使用 IAP 的虚拟机时,IAP 会将 SSH 连接封装在 HTTPS 内部,然后再将连接转发到该虚拟机。然后,IAP 会检查您是否具有所需的 IAM 权限;如果您具有,则授予对虚拟机的访问权限。

如果您需要连接到没有外部 IP 地址的虚拟机,并且您无法使用 IAP,请查看仅限内部虚拟机的连接选项中列出的其他方法。

准备工作

  • 创建防火墙规则以启用来自 IAP 的连接。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

支持的操作系统

Compute Engine 上提供的所有公共 Linux 映像都支持这些连接方法。对于 Fedora CoreOS 映像,您必须先设置 SSH 访问,然后才能使用这些方法。

连接到虚拟机

如需连接到虚拟机,请完成以下任一标签页中的步骤。

控制台

执行以下操作,使用浏览器中的 SSH 功能通过虚拟机的内部 IP 地址建立 SSH 连接隧道:

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 在虚拟机实例列表中,点击要连接的实例所在行中的 SSH

gcloud

使用带有 --tunnel-through-iap 标志gcloud compute ssh 命令,通过虚拟机的内部 IP 地址建立 SSH 连接隧道:

    在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  1. 通过运行以下命令连接到虚拟机:

    gcloud compute ssh VM-NAME \
        --tunnel-through-iap
  2. VM_NAME 替换为要连接到的虚拟机的名称。

IAP 桌面

要使用 IAP 桌面连接到虚拟机,请执行以下操作:

  1. 在工作站上安装 IAP 桌面(如果尚未安装)。

  2. 打开 IAP 桌面。此时会打开添加项目窗口。

  3. 收到提示时,使用有权访问包含您要连接到的虚拟机的项目的 Google 账号登录。

  4. 添加项目窗口中,输入包含要连接的虚拟机的项目的项目 ID 或名称。

  5. Project Explorer 窗口中,再次右键点击虚拟机的名称,然后选择连接以连接到虚拟机。

PuTTY 应用

执行以下操作,使用 PuTTY 通过虚拟机的内部 IP 地址建立 SSH 连接隧道:

  1. 将 SSH 密钥添加到虚拟机(如果尚未添加)。
  2. 如果您的工作站尚未安装 PuTTY 应用,请下载 PuTTY 软件包文件
  3. 在 Google Cloud 控制台中,打开虚拟机实例页面,找到要连接的虚拟机的名称。

    转到虚拟机实例

  4. 打开 PuTTY 应用;系统随即会打开一个连接配置窗口。
  5. Host Name 字段中,输入与 SSH 密钥关联的用户名,以及要连接的虚拟机的名称。请使用以下格式:

    USERNAME@VM_NAME

    替换以下内容:

    • USERNAME:您的用户名。如果您在元数据中管理 SSH 密钥,则用户名是您在创建 SSH 密钥时指定的名称。对于 OS Login 账号,用户名在 Google 个人资料中定义。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • NAME:虚拟机的名称。
  6. 类别菜单中,依次点击连接> SSH > 身份验证
  7. 用于身份验证的私钥文件字段中,选择与您添加到虚拟机的公钥对应的 SSH 私钥文件。
  8. 类别菜单中,依次点击连接 > 代理
  9. 代理类型部分中,选择本地
  10. Telnet 命令或本地代理命令字段中,输入以下内容:

    gcloud.cmd compute start-iap-tunnel VM_NAME PORT_NUMBER --listen-on-stdin --project=PROJECT_ID --zone=ZONE

    请替换以下内容:

    • VM_NAME:您要连接到的虚拟机的名称。
    • PORT_NUMBER:运行 sshd 守护程序的端口。默认 PORT_NUMBER22
    • PROJECT_ID:托管要连接到的虚拟机的项目。
    • ZONE:该虚拟机所在的可用区。
  11. 点击打开以连接到虚拟机。

问题排查

如需查找诊断和解决失败的 SSH 连接问题的方法,请参阅排查 SSH 问题

后续步骤