通过浏览器进行 SSH 连接

借助通过浏览器发起 SSH 连接窗口,您可以使用 SSH 从 Google Cloud Console 连接到 Compute Engine 虚拟机 (VM) 实例。无需安装网络浏览器扩展程序或额外的软件即可使用此功能。“通过浏览器发起 SSH 连接”可替代其他方法来连接到实例。

连接到 Linux 虚拟机实例

每当您从浏览器连接到 Linux 实例时,Compute Engine 将为您管理 SSH 密钥,并在需要时创建和应用 SSH 密钥对。您无法管理从浏览器进行连接时使用的 SSH 密钥。相反,通过浏览器进行连接的用户访问权限由 Identity and Access Management 角色控制。可在 Google Cloud Console 的 IAM 页面中查看项目的成员和 IAM 角色:

转到 IAM 页面

要通过浏览器连接,您必须是身份为计算实例管理员的项目成员。如果您的实例可作为服务帐号运行,则您还必须是服务帐号用户。如果您无权通过浏览器进行连接,请让项目所有者将您添加到项目并授予您访问权限

获得访问权限后,您可以直接从 Cloud Console 中的网络浏览器连接到 Linux 实例:

  1. 在 Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”

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

    实例名称旁边的 SSH 按钮。

或者,您也可以在实例详情页面中点击实例的名称并点击 SSH,以打开与实例的 SSH 连接。

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

如果实例配置为允许通过 Identity-Aware Proxy 建立 TCP 隧道,则您可以通过浏览器使用 SSH 连接到该实例。这对于没有外部 IP 地址的实例尤其有用。如需启用此功能,请参阅 Identity-Aware Proxy TCP 转发。注意:IAP 是配置了 TCP 隧道和外部 IP 地址的实例的默认路由。

受支持的环境

“通过浏览器发起 SSH 连接”支持以下各项:

  • 网络浏览器
    • 最新版本的 Google Chrome
    • Firefox
    • Microsoft Edge
    • Microsoft Internet Explorer 11 及更高版本
    • Safari 8 及更高版本。请注意,此功能不支持 Safari 的无痕浏览模式。
  • 虚拟机配置
    • Google Cloud 原生提供的所有 Linux 虚拟机映像。

已知问题

  • SSH 密钥转移时间缓慢。默认情况下,每次建立新连接时,浏览器中的 SSH 都会将新 SSH 密钥推送到项目元数据。对于拥有大量虚拟机的项目,速度可能会很慢。为加快密钥转移速度,请考虑屏蔽项目范围的 SSH 密钥或启用 OS Login

  • 启动延迟。使用“通过浏览器发起 SSH 连接”功能时,当前的连接时间为 5 至 30 秒。当前版本的访客环境支持更快的连接速度。

  • 新的虚拟机实例并非立即可用。新虚拟机需要一些时间完成启动操作,然后才能建立 SSH 连接。如果您无法连接到新实例,请在几分钟后重试。

  • 间歇性断开连接。目前,我们不对连接的生命周期提供特定的 SLA。如果您打算长时间保持终端窗口打开,请使用终端多路复用器,例如 tmuxscreen

  • 连接到没有外部 IP 地址的实例。如果您的 Compute Engine 实例只有内部 IP 地址,请使用下述选项之一进行连接:

    • 在配置了 Identity-Aware Proxy TCP 转发的情况下使用“通过浏览器发起 SSH 连接”功能。

    • 借助堡垒主机使用“通过浏览器发起 SSH 连接”。要使用此选项,目标实例和堡垒实例必须位于同一 VPC 网络或位于彼此连接的 VPC 网络中。

      要通过堡垒主机使用“通过浏览器发起 SSH 连接”,请完成以下步骤:

      1. 使用“通过浏览器发起 SSH 连接”,连接到具有外部 IP 地址的堡垒实例。执行此步骤将生成临时 SSH 密钥对,并将公钥上传到堡垒主机的项目或实例元数据中。
      2. 从堡垒实例连接到仅具有内部 IP 地址的目标实例。要从堡垒实例连接到目标实例,请运行以下命令,将 internal-ip 替换为目标实例的内部 IP 地址:

        ssh -A internal-ip

        必须在连接到堡垒实例后大约两分钟内运行此命令,然后才能使用在第一步中生成的临时密钥。

  • Ctrl+W 可关闭窗口。用作浏览器键盘快捷键的 Ctrl+WCtrl+F4Ctrl+Tab 和其他组合键不会由 SSH 客户端传递给目标系统。如需发送这些快捷键或其他快捷键,请点击窗口右上角的键盘图标。如果您使用 Google Chrome 浏览器,可以安装“SSH for Google Cloud Platform”扩展程序。此扩展程序让您能够直接访问浏览器通常预留的键盘快捷键(例如 Ctrl+W),从而提升了“通过浏览器发起 SSH 连接”和“使用 SSH 连接 Cloud Shell”的控制台体验。

  • 大文件的传输速度有时会很慢。我们建议您使用 gcloud compute scp 命令来传输大文件。

处理“无法在端口 22 上连接”错误消息

在以下情况下,您可能会看到此错误:

  • 实例正在启动,而 sshd 尚未运行。在重试之前验证实例已完成启动。

  • 实例未运行 sshd。sshd 默认在通过标准 Compute Engine 映像创建的实例上运行。如果您已手动停用 sshd,或已配置并未运行此服务的自定义映像,则“通过浏览器发起 SSH 连接”将不起作用。

  • sshd 侦听的端口不是您正在连接的端口。默认情况下,“通过浏览器发起 SSH 连接”会连接到端口 22 上的实例。如果在自定义端口上运行 sshd,则可以使用 SSH 按钮下拉列表中的通过自定义端口在浏览器窗口中打开项目连接到该端口。

  • 没有防火墙规则允许在该端口上进行 SSH 访问。默认在所有 Compute Engine 实例上启用对端口 22 的 SSH 访问。如果您已停用此访问权限,则“通过浏览器发起 SSH 连接”不起作用。如果在端口 22 以外的端口上运行 sshd,则您需要使用自定义防火墙规则启用对该端口的访问。

  • 已启用允许 SSH 访问的防火墙规则,但它并未配置为允许来自 Cloud Console 服务的连接。基于浏览器的 SSH 会话的源 IP 地址由 Cloud Console 动态分配,可能因会话而异。为了使该功能可用,您必须允许来自任何 IP 地址的连接,或允许来自 Google IP 地址范围(可使用公开 SPF 记录检索)的连接。

  • 实例已关停。验证实例已经启动并运行。要了解如何对运行状况不佳的实例进行问题排查,请参阅有关使用 Compute Engine 的一般提示

处理“无法连接,正在重试…”错误

  • 实例可能未运行访客环境验证访客环境是否已安装且正在运行。

  • 实例的启动磁盘空闲空间已用尽。建立连接时,访客环境将使用当前会话所用的 SSH 公钥来更新 ~/.ssh/authorized_keys 文件。如果磁盘的空闲空间已用尽,则更新将失败。要确定磁盘空间方面的问题,请检查实例的串行控制台输出并查找“空间不足”错误。您可以使用以下方法来解决磁盘空间问题:

    • 调整实例的永久性启动磁盘的大小以增加磁盘空间。如果实例使用的操作系统映像支持自动调整大小,则此选项操作起来最简单,因为在实例重启后,操作系统将自动调整根分区的大小以匹配新的容量。
    • 如果您知道哪些文件正在使用磁盘空间,可创建启动脚本以删除不必要的文件,为启动实例释放空间。重启实例,以便脚本执行并清除文件。请注意使用正确的命令并删除相应的文件。在您的实例启动并且您可以通过 SSH 连接到实例后,请将 startup-script 元数据项恢复原状,避免它继续删除文件。
    • 如需了解如何访问实例磁盘,请参阅有关使用 Compute Engine 的一般提示
  • $HOME$HOME/.ssh$HOME/.ssh/authorized_keys 上的权限或所有权可能错误。

    • 所有权 访客环境需要能够将 SSH 公钥存储在发起连接的用户的 $HOME/.ssh/authorized_keys 文件中。确保 $HOME 目录、$HOME/.ssh 目录和 authorized_keys 文件的所有者就是发起连接的用户。
    • 权限 请尝试通过更改用户名以其他用户身份进行连接,并解决无法连接的用户的所有权限问题。

      目录/文件 必需的 Unix 权限
      $HOME 目录 0755
      0700
      $HOME/.ssh 目录 0700
      authorized_keys 文件 0600

复制/粘贴

您可以使用浏览器和平台支持的键盘快捷键(Windows 和 Linux 中为 Ctrl+C/Ctrl+V,macOS 中为 Cmd+C/Cmd+V,Chrome 操作系统中为 Ctrl+Shift+V)复制和粘贴文本。这些命令通常适用于大部分配置,但您的配置可能会呈现不同结果。 如果您在复制和粘贴大量文本时遇到问题,请改用文件传输功能。

传输文件

如果您可以使用通过浏览器发起 SSH 连接窗口与实例建立 SSH 连接,则可以使用该连接将文件传输到该实例。

如需了解详情,请参阅在浏览器中使用 SSH 传输文件

滚动

您可以使用鼠标滚轮或触控板滚动终端。或者,在 Windows 和 Linux 上使用 Ctrl+Shift+PageUp/Ctrl+Shift+PageDn 键盘快捷键来滚动终端;在 macOS 上使用 Fn+Shift+Up/Fn+Shift+Down 来滚动终端。

登录用户名

默认用户名

默认情况下,SSH 会话的用户名是从登录帐号的电子邮件地址生成的,并省略域名信息。例如,如果电子邮件是 user@gmail.com,则相应的用户名将是 user

启用了操作系统登录的默认用户名

如果您启用了操作系统登录,并且 Google Workspace 管理员未设置用户名,则默认设置较长的用户名。该用户名包含网域信息。例如,如果电子邮件是 user@gmail.com,则相应的用户名是 user_gmail_com。如需详细了解操作系统登录行为,请参阅预期登录行为

更改默认用户名

您可以按照以下说明从 SSH 窗口中更改用户名:

  1. 连接到虚拟机实例
  2. 在 SSH 窗口右上角,点击设置图标 “设置”图标。
  3. 选择更改 Linux 用户名。在 Linux 系统上,登录名的长度上限为 32 个字符,因此默认用户名和配置后的用户名会被截断,以免超出限制。
  4. (可选)将数据复制到新的主目录。每个新用户名都是不同的 Unix 用户,因此如果您使用主目录存储任何数据,则可以使用 cp 命令将数据复制到新目录。例如,如果您将用户名从 user_gmail_com 更改为 user,请运行以下命令:

    # This will overwrite files in the target directory, so be careful.
    $ sudo cp -r /home/user_gmail_com/. /home/user
    
    $ sudo chown -R user:user /home/user
    

使用用户提供的 SSH 私钥

您可以视情况通过选择 SSH 按钮下拉列表中的使用提供的 SSH 私钥在浏览器窗口中打开项,与用户提供的 SSH 私钥进行连接。

如需使用用户提供的 SSH 密钥连接到您的实例,请完成以下前提步骤:

  1. 在您的项目或单个实例上启用 OS Login 功能
  2. 使用用户的 OS Login 配置文件配置 SSH 公钥。在请求中添加项目 ID,以确保您的配置文件已正确配置。