使用 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 进行身份验证。

    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

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

      gcloud init
    2. Set a default region and zone.

支持的操作系统

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 问题

后续步骤