使用堡垒主机连接到 Linux 虚拟机


本文档介绍如何使用堡垒主机虚拟机通过内部 IP 地址连接到虚拟机 (VM) 实例。堡垒主机提供 Virtual Private Cloud (VPC) 网络的外部入口点,该网络包含没有外部 IP 地址的虚拟机。使用堡垒主机时,请先连接到堡垒主机,然后再连接到目标虚拟机。

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

支持的操作系统

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

创建堡垒主机虚拟机

在专用集群内部网络中创建 Compute Engine 虚拟机以充当可以管理集群的堡垒主机。

控制台

执行以下操作,创建堡垒主机虚拟机:

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    打开“创建实例”

    1. 指定以下虚拟机详情:
    • 名称:虚拟机的名称。
    • 机器类型:机器类型。选择小型机器类型,例如 e2-micro
    • 启动磁盘操作系统:任何 Linux 操作系统。
  2. 展开高级选项部分,然后执行以下操作:

    1. 网络接口部分中,选择与目标虚拟机相同的 VPC 网络和子网。

    2. 对于外部 IPv4 地址,选择临时

  3. 要创建并启动该虚拟机,请点击创建

gcloud

使用 gcloud compute instances create 命令创建堡垒主机虚拟机:

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

    激活 Cloud Shell

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

  2. 通过运行以下命令创建堡垒主机虚拟机:

    gcloud compute instances create VM_NAME \
      --zone=ZONE \
      --machine-type=e2-micro \
      --image-family=IMAGE_FAMILY \
      --image-project=IMAGE_PROJECT \
      --network-interface=subnet=SUBNET,address=""
    

    请替换以下内容:

    • VM_NAME:虚拟机的名称。
    • ZONE:虚拟机的可用区。
    • IMAGE_FAMILY:Linux 映像系列
    • IMAGE_PROJECT:包含映像的映像项目
    • SUBNET:与目标虚拟机相同的 VPC 子网。如果您使用默认 VPC,则 SUBNETdefault

连接到虚拟机

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

gcloud

运行 gcloud compute ssh 命令,通过堡垒主机使用 SSH 连接到虚拟机:

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

    gcloud compute ssh BASTION_NAME

    BASTION_NAME 替换为堡垒主机虚拟机的名称。

  2. 使用 --internal-ip 标志从堡垒主机虚拟机连接到主虚拟机的内部 IP 地址:

    gcloud compute ssh VM_NAME \
        --internal-ip

    VM_NAME 替换为要连接到的虚拟机的名称。

OpenSSH 客户端

执行以下操作,从 OpenSSH 客户端通过堡垒主机连接到虚拟机:

  1. 将 SSH 密钥添加到虚拟机(如果尚未添加)。
  2. 在 Google Cloud 控制台中,转到虚拟机实例页面,找到堡垒主机虚拟机的外部 IP 地址。

    转到虚拟机实例

  3. 在您的工作站上打开一个终端。
  4. 通过运行以下命令连接到堡垒主机虚拟机:

    ssh -A -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP

    请替换以下内容:

    • PATH_TO_PRIVATE_KEY:与您添加到虚拟机的公钥对应的 SSH 私钥文件的路径。
    • USERNAME:您的用户名。如果您在元数据中管理 SSH 密钥,则用户名是您在创建 SSH 密钥时指定的名称。对于 OS Login 账号,用户名在 Google 个人资料中定义。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • EXTERNAL_IP:虚拟机的外部 IP 地址。
  5. 从堡垒主机虚拟机使用以下命令连接到虚拟机的内部 IP 地址:

    ssh USERNAME@INTERNAL_IP

    替换以下内容:

    • USERNAME:您的用户名。如果您在元数据中管理 SSH 密钥,则用户名是您在创建 SSH 密钥时指定的名称。对于 OS Login 账号,用户名在 Google 个人资料中定义。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • INTERNAL_IP:虚拟机的内部 IP 地址。

PuTTY 应用

执行以下操作,使用 PuTTY 通过堡垒主机连接到虚拟机:

  1. 向堡垒主机虚拟机添加 SSH 密钥(如果尚未添加)。
  2. 如果您的工作站尚未安装 PuTTY 应用,请下载 PuTTY 软件包文件
  3. 在 Google Cloud 控制台中,转到虚拟机实例页面,找到要连接的虚拟机的内部 IP 地址。

    转到虚拟机实例

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

    USERNAME@EXTERNAL_IP

    替换以下内容:

    • USERNAME:您的用户名。如果您在元数据中管理 SSH 密钥,则用户名是您在创建 SSH 密钥时指定的名称。对于 OS Login 账号,用户名在 Google 个人资料中定义。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • EXTERNAL_IP:虚拟机的外部 IP 地址。
  6. 类别菜单中,依次点击连接> SSH > 身份验证
  7. 用于身份验证的私钥文件字段中,选择与您添加到虚拟机的公钥对应的 SSH 私钥文件。
  8. 身份验证参数部分中,选择允许代理转发
  9. 点击打开以连接到堡垒主机虚拟机。
  10. 从堡垒主机虚拟机使用以下命令连接到虚拟机的内部 IP 地址:

    ssh USERNAME@INTERNAL_IP

    替换以下内容:

    • USERNAME:您的用户名。如果您在元数据中管理 SSH 密钥,则用户名是您在创建 SSH 密钥时指定的名称。对于 OS Login 账号,用户名在 Google 个人资料中定义。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • INTERNAL_IP:虚拟机的内部 IP 地址。

问题排查

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

后续步骤