使用高级方法连接到实例

要连接到 Linux 和 Windows Server 实例,最简单的方法是使用 Compute Engine 工具进行连接。但是,在某些情况下,您可能希望管理自己的凭据、使用备用连接路径连接到实例,或使用第三方工具连接到实例。

本指南介绍如何完成以下任务:

准备工作

为实例提供 SSH 公钥

要连接 Linux VM 实例,您需要自己的 SSH 密钥,该密钥由唯一的 SSH 私钥文件和匹配的 SSH 公钥文件组成。每当使用 Compute Engine 工具进行连接时,都会为您创建和管理 SSH 密钥。但是,若要通过第三方工具进行连接,则必须使用以下选项之一为实例提供 SSH 公钥:

将 SSH 公钥应用于要连接的实例后,您可以使用 SSH 私钥来获取对该实例的访问权限。

使用第三方工具进行连接

您可以通过第三方工具呈现 SSH 私钥文件来访问实例。如果您使用的是 Linux 或 macOS 工作站,则可以使用 ssh 命令进行连接。但是,如果使用的是 Windows 工作站,由于未包含用于呈现 SSH 私钥文件的工具,因此您必须下载诸如 PuTTY 等外部工具。

SSH(Linux 和 macOS)

要使用 ssh 连接到实例,请执行以下操作:

  1. 使用其中一个可用选项为实例提供 SSH 公钥

  2. 在控制台中,查找要连接到的实例的外部 IP 地址。转到您的实例列表。

    转到实例页面

  3. 在终端中,使用 ssh 命令和 SSH 私钥文件连接到实例。指定您的用户名和您要连接到的实例的外部 IP 地址。

    ssh -i [PATH_TO_PRIVATE_KEY] [USERNAME]@[EXTERNAL_IP_ADDRESS]

    其中:

    • [PATH_TO_PRIVATE_KEY]您的 SSH 私钥文件的路径
    • [USERNAME] 是连接到实例的用户的名称。在创建 SSH 密钥时,就指定了该 SSH 公钥的用户名。如果实例具有该用户的有效 SSH 公钥,并且您拥有与之匹配的 SSH 私钥,则您可以以该用户的身份连接到此实例。
    • [EXTERNAL_IP_ADDRESS] 是您的实例的外部 IP 地址。

    如果连接成功,您就可以使用终端在您的实例上运行命令。完成操作后,可使用 exit 命令断开与实例的连接。

PuTTY (Windows)

要使用 PuTTY 连接到实例,请执行以下操作:

  1. 使用其中一个可用选项为实例提供 SSH 公钥

  2. 下载 putty.exe

  3. 运行 PuTTY 工具。对于本示例而言,只需运行您已下载的 putty.exe 文件即可。系统会打开一个窗口,您可以在其中配置您的连接设置。

  4. Google Cloud Platform Console 中,查找您要连接到的实例的外部 IP 地址。转到您的实例列表。

    转到实例页面

  5. 在 PuTTY 工具中,在主机名字段中指定您的用户名和您要连接到的实例的外部 IP 地址。在下面的示例中,用户名为 jane_doe,外部 IP 地址为 203.0.113.2

    将主机名字段设置为 jane_doe@203.0.113.2

    按以下格式输入您的用户名和外部 IP 地址:

       [USERNAME]@[EXTERNAL_IP_ADDRESS]

    其中:

    • [USERNAME] 是连接到实例的用户的名称。在创建 SSH 密钥时,就指定了该 SSH 密钥的用户名。如果实例具有该用户的有效 SSH 公钥,并且您拥有与之匹配的 SSH 私钥,则您可以以该用户的身份连接到此实例。
    • [EXTERNAL_IP_ADDRESS] 是要连接到的实例的外部 IP 地址。
  6. 在 PuTTY 窗口的左侧,导航到连接 > SSH > 身份验证

  7. 用于身份验证的私钥文件 (Private key file for authentication) 字段设置为您的私钥文件的路径

    在私钥文件字段中设置 my-ssh-key.ppk 文件的路径。

  8. 如果您计划从实例连接到 Cloud Platform 网络上的其他实例,请启用允许代理转发 (Allow agent forwarding)。例如,您可能允许代理转发将您的 SSH 私钥转发到堡垒主机实例,然后连接到没有外部 IP 地址的实例。

    对您要连接到的实例允许代理转发。

  9. 点击打开以打开一个与您的实例连接的终端。

    如果连接成功,您就可以使用终端在您的实例上运行命令。完成操作后,可使用 exit 命令断开与实例的连接。

连接到没有外部 IP 地址的实例

您可以创建没有外部 IP 地址的实例,以将其与外部网络隔离开来。隔离的实例在 Google Cloud Platform 虚拟私有云 (VPC) 网络上仅具有内部 IP 地址。您仍然可以使用以下方法之一连接到这些实例:

通过 VPN 连接进行连接

如果您具有从本地网络连接到 Google Cloud Platform VPC 的虚拟专用网络 (VPN),那么便可以直接连接到实例的内部 IP 地址。

您可以使用 gcloud 命令行工具、Linux 和 macOS 上的 SSH 或 Windows 上的 PuTTY 连接到没有外部 IP 地址的实例。

gcloud

  1. 使用带有 --internal-ip 标志的 gcloud beta compute ssh 命令连接到没有外部 IP 地址的实例。

    gcloud beta compute ssh [INTERNAL_INSTANCE_NAME] --internal-ip
    

    其中 [INTERNAL_INSTANCE_NAME] 是您要连接到的实例的名称。

如果连接成功,您就可以使用终端在该内部实例上运行命令。完成操作后,可使用 exit 命令关闭连接并返回到您的本地工作站。

SSH

要从 Linux 或 macOS 工作站连接到没有外部 IP 地址的实例,请执行以下操作:

  1. 使用其中一个可用选项为实例提供 SSH 公钥

  2. 在您的本地计算机上,启动 ssh-agent 来为您管理 SSH 密钥:

    $ eval ssh-agent $SHELL
    
  3. 使用 ssh-add 命令将 SSH 私钥从本地计算机加载到代理中,并将其用于所有 SSH 以进行身份验证。

    $ ssh-add ~/.ssh/[PRIVATE_KEY]
    

    其中 [PRIVATE_KEY] 是您的私钥文件的文件名。

  4. 查找您要连接到的实例的内部 IP 地址。您可以在“实例”页面上的内部 IP 列中查找该地址。

    转到实例页面

  5. 通过使用 SSH 连接到没有外部 IP 地址的实例。

    $ ssh [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]

    其中:

    • [USERNAME] 是附加到 SSH 密钥的名称。
    • [INTERNAL_INSTANCE_IP_ADDRESS] 是您要连接到的实例的内部 IP 地址。

如果连接成功,您就可以使用终端在没有外部 IP 地址的实例上运行命令。完成操作后,可使用 exit 命令关闭连接并返回到您的本地工作站。

PuTTY

要从 Windows 工作站连接到没有外部 IP 地址的实例,请执行以下操作:

  1. 使用其中一个可用选项为实例提供 SSH 公钥

  2. 查找您要连接到的实例的内部 IP 地址。您可以在“实例”页面上的内部 IP 列中查找该地址。

    转到实例页面

  3. 使用 PuTTY 连接到您的实例。连接时,请指定您要连接到的实例的内部 IP 地址。

    如果连接成功,您就可以使用终端在没有外部 IP 地址的实例上运行命令。完成操作后,可使用 exit 命令关闭连接并返回到您的本地工作站。

通过堡垒主机进行连接

堡垒主机实例具有外部 IP 地址以及内部 IP 地址。如果需要访问内部网络上没有外部 IP 地址的实例,则可以连接到堡垒主机,然后从该堡垒主机连接到内部实例。此外,您可以从堡垒主机实例连接到其他对等 VPC 网络上的实例。

从堡垒主机实例连接到其他实例时,仍需要 SSH 私钥。除非堡垒主机实例安装并配置了 gcloud 命令行工具来管理您的私钥,否则必须将私钥转发到堡垒主机实例。

您可以使用 gcloud 命令行工具、Linux 和 macOS 上的 SSH 或 Windows 上的 PuTTY 连接到没有外部 IP 地址的实例。对于这些示例,堡垒主机实例必须具有 Linux 操作系统。

gcloud

如果使用 gcloud 命令行工具,则可以连接到没有外部 IP 地址的实例,而无需将私有 SSH 密钥转发到堡垒主机。为此,必须在本地工作站和堡垒主机实例上安装 gcloud。如果需要将私钥从本地工作站转发到堡垒主机实例,请按照 SSH 或 PuTTY 说明进行操作

要使用 gcloud 命令行工具连接到没有外部 IP 地址的实例,请执行以下操作:

  1. 对于堡垒主机实例上的服务帐号,请设置读/写 Compute Engine API 访问权限范围

    (提示:使用 --scopes compute-rw。)

  2. 授予必要的 IAM 权限,以允许堡垒主机访问您的公共 SSH 密钥。选择以下一个选项:

    堡垒主机上的服务帐号现在应该可以应用您的公共 SSH 密钥。

  3. 连接到堡垒主机实例。

    gcloud compute ssh [EXTERNAL_INSTANCE_NAME]
    

    其中 [EXTERNAL_INSTANCE_NAME] 是您要用来访问内部网络的堡垒主机实例的名称。

  4. 在 Linux 堡垒主机实例中,使用带有 --internal-ip 标志的 gcloud beta compute ssh 命令通过其内部 IP 地址连接到实例。

    gcloud beta compute ssh [INTERNAL_INSTANCE_NAME] --internal-ip
    

    其中 [INTERNAL_INSTANCE_NAME] 是您要连接到的实例的名称。

如果连接成功,您就可以使用终端在该内部实例上运行命令。完成后,您可以使用 exit 命令关闭每个实例连接并返回本地工作站。

SSH

如果需要将私钥转发到堡垒主机实例,必须将您的密钥添加到 ssh-agent。然后,使用 gcloud compute ssh 命令或 ssh 命令建立与堡垒主机的初始连接,并转发 SSH 代理中的密钥。此过程仅适用于 Linux 和 macOS 工作站。如果需要从 Windows 工作站将私钥转发到堡垒主机,请改为按照 PuTTY 说明进行操作。

要从 Linux 或 macOS 工作站连接到没有外部 IP 地址的实例,请执行以下操作:

  1. 使用一个可用选项来提供 SSH 公钥。确保将此 SSH 公钥提供给 Linux 堡垒主机实例和没有外部 IP 地址的实例。

  2. 在您的本地计算机上,启动 ssh-agent 来为您管理 SSH 密钥:

    $ eval ssh-agent $SHELL
    
  3. 使用 ssh-add 命令将 SSH 私钥从本地计算机加载到代理中,并将其用于所有 SSH 命令的身份验证。

    $ ssh-add ~/.ssh/[PRIVATE_KEY]
    

    其中 [PRIVATE_KEY] 是您的私钥文件的文件名。

  4. 查找 Linux 堡垒主机实例的外部 IP 地址,并查找您要连接到的内部实例的内部 IP 地址。您可以在“实例”页面上的外部 IP内部 IP 列中查找该地址。

    转到实例页面

  5. 使用 sshgcloud compute ssh 连接到 Linux 堡垒主机实例。对于任一选项,请包括 -A 参数以启用身份验证代理转发。

    连接到 Linux 堡垒主机实例并使用 ssh 转发您的私钥。

    $ ssh -A [USERNAME]@[BASTION_HOST_EXTERNAL_IP_ADDRESS]

    其中:

    • [USERNAME] 是附加到 SSH 密钥的名称。
    • [BASTION_HOST_EXTERNAL_IP_ADDRESS] 是您用于访问内部网络的堡垒主机实例的外部 IP 地址。

    或者,您可以使用 gcloud compute ssh 命令连接到堡垒主机实例并转发您的私钥。此选项允许您使用 gcloud 命令行工具连接到堡垒主机实例,然后在连接到内部 IP 地址时使用具有已转发凭据的常规 ssh

    gcloud compute ssh --ssh-flag="-A" [BASTION_HOST_INSTANCE_NAME]
    

    其中 [BASTION_HOST_INSTANCE_NAME] 是您要用来访问内部网络的堡垒主机实例的名称。

  6. 使用 SSH 从 Linux 堡垒主机实例连接到没有外部 IP 地址的实例。

    $ ssh [USERNAME]@[INTERNAL_INSTANCE_IP_ADDRESS]

    其中:

    • [USERNAME] 是附加到 SSH 密钥的名称。
    • [INTERNAL_INSTANCE_IP_ADDRESS] 是您要连接到的实例的内部 IP 地址。

如果连接成功,您就可以使用终端在没有外部 IP 地址的实例上运行命令。完成后,您可以使用 exit 命令关闭每个实例连接并返回本地工作站。

PuTTY

要从 Windows 工作站连接到没有外部 IP 地址的实例,请执行以下操作:

  1. 使用一个可用选项来提供 SSH 公钥。确保将此 SSH 公钥提供给 Linux 堡垒主机实例和没有外部 IP 地址的实例。

  2. 查找 Linux 堡垒主机实例的外部 IP 地址,并查找您要连接到的内部实例的内部 IP 地址。您可以在“实例”页面上的外部 IP内部 IP 列中查找该地址。

    转到实例页面

  3. 使用 PuTTY 连接到 Linux 堡垒主机实例。启用允许代理转发 (Allow agent forwarding) 设置以将 SSH 私钥传递到堡垒主机。

  4. 使用 SSH 从 Linux 堡垒主机实例连接到没有外部 IP 地址的实例:

    $ ssh [USERNAME]@[INTERNAL_IP_ADDRESS]
    

    其中:

    • [USERNAME] 是附加到 SSH 密钥的名称。
    • [INTERNAL_IP_ADDRESS] 是您要连接到的实例的内部 IP 地址。

    如果连接成功,您就可以使用终端在没有外部 IP 地址的实例上运行命令。完成后,您可以使用 exit 命令关闭每个实例连接并返回本地工作站。

root 用户身份连接到实例

默认情况下,公有映像和大多数常见操作系统不允许使用 SSH 进行 root 登录。按照最佳做法,/etc/ssh/sshd_config SSH 配置文件已将 PermitRootLogin 参数设置为 no

由于这样默认设置了此参数,因此即使您在项目或实例元数据中为 root 指定了 SSH 密钥,也不能以 root 用户身份连接到实例。如果某个用户需要 root 权限,他们可以通过 sudo 运行相关命令来获取这些权限。

使用 PowerShell 终端连接到 Windows 实例

如果您拥有带 PowerShell 的 Windows 工作站,可以通过远程 PowerShell 会话连接到 Windows Server 实例。此过程类似于使用 SSH 连接到 Linux 实例。

  1. 如果尚未在远程 Windows 实例上创建用户名和密码,请创建或重置 Windows 密码

  2. 添加防火墙规则,可在 Windows Server 实例所在的 Cloud Platform VPC 网络上打开端口 5986

  3. 在本地工作站上,打开 PowerShell 终端。

  4. (可选)您可以初始化变量以保留用户凭据,这样您就无需在每次连接到实例时输入它们。如果跳过此步骤,您在之后会收到让您输入用户名和密码的提示。

    PS C:\> $credentials = Get-Credential
    
  5. 使用 Enter-PSSession 命令启动远程 PowerShell 会话并包含标志,以使用 SSL 和跳过凭据检查。

    PS C:\> Enter-PSSession -ComputerName [IP_ADDRESS] -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential $credentials
    

    [IP_ADDRESS] 是要连接到的实例的外部 IP 地址、DNS 名称或 Windows 计算机名称。

如果连接成功,则命令提示符会更改为包括远程 Windows 实例的 IP 地址。现在,您就可以使用终端在远程 Windows Server 实例上运行 PowerShell 命令。

作为 Enter-PSSession 命令的替代方法,您可以运行带有 Invoke-Command 标志的 -ScriptBlock,在远程实例上执行 PowerShell 命令,而无需建立交互式会话。

PS C:\> Invoke-Command -ComputerName [IP_ADDRESS] -ScriptBlock { [SCRIPT] } -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential $credentials

其中:

  • [IP_ADDRESS] 是您要连接到的实例的 IP 地址、DNS 名称或 Windows 计算机名称。
  • [SCRIPT] 是要在远程实例上运行的一个或多个命令。例如,指定 Get-EventLog -log "Windows PowerShell" 以获取日志事件列表。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档