通过浏览器进行 SSH 连接

藉由通过浏览器进行 SSH 连接功能,您可以使用 SSH 从 Google Cloud Platform Console 中连接到 Google Compute Engine 虚拟机实例。无需安装网络浏览器扩展程序或额外的软件即可使用此功能。“通过浏览器进行 SSH 连接”可替代其他方法来连接到实例。

连接到 Linux 虚拟机实例

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

转到 IAM 页面

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

在您获授予访问权限后,可以在 GCP Console 中直接通过网络浏览器连接到 Linux 实例:

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

    转到“虚拟机实例”页面

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

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

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

受支持的环境

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

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

已知问题

  • 启动延迟:使用“通过浏览器进行 SSH 连接”时,当前的连接时间为 5 至 30 秒。在虚拟机实例上运行时,较新版本 Google 守护进程的连接时间接近 5 秒。在其他情况下,预计连接时间长达 30 秒。

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

  • 间歇性断开:此时,我们不会为连接生命周期提供特定服务等级协议 (SLA)。如果您打算长时间保持终端窗口打开,请使用终端多路复用器,例如 tmuxscreen

  • 连接到没有外部 IP 地址的实例:此时,您不能使用“通过浏览器进行 SSH 连接”功能连接到没有外部 IP 地址的实例。变通方法是,您可以使用此功能,与项目中其他确实具有外部 IP 地址的实例建立 SSH 连接,例如运行前端的实例。然后使用 ssh -A INTERNAL_IP 命令,通过所需实例的内部 IP 地址登录所需实例。您需要在登录第一个实例后大约两分钟内、在 SSH 密钥过期前运行此命令,而且您的登录凭据不再适用于转发的连接。

  • Ctrl+W 关闭窗口:作为浏览器键盘快捷键的 Ctrl+W、Ctrl+F4、Ctrl+Tab 和其他组合键不会由 SSH 客户端传递给目标系统。要发送这些快捷键或其他快捷键,请点击窗口右上角的键盘图标。如果您使用 Google Chrome 浏览器,则可以安装“SSH for Google Cloud Platform”扩展程序。此扩展程序通过授予您直接访问通常由浏览器预留的键盘快捷键(例如 CTRL-W)的权限,改善了“通过浏览器进行 SSH 连接”和“使用 SSH 连接 Google Cloud Shell”的控制台体验。

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

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

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

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

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

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

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

  • 实例已关停。 验证实例是否已启动并运行。如需了解如何对运行状况不佳的实例进行问题排查,请参阅此指南

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

  • 实例未运行 Google 守护进程。Google 守护进程已在所有标准 Google Compute Engine 映像上安装并运行。自定义映像不受“通过浏览器进行 SSH 连接”功能支持。您可以导航至串行控制台输出页面,并查找以 accounts-from-metadata: 字符串为前缀的输出行,以验证守护进程是否正在运行。如果您正在使用标准映像,但在串行控制台输出中看不到这些输出前缀,则守护进程可能已停止。请重新启动实例,以重启守护进程。

  • 实例的启动磁盘已用完空闲空间。 建立连接时,守护进程将利用当前会话使用的公开 SSH 密钥来更新 ~/.ssh/authorized_keys 文件。如果磁盘已用完空闲空间,则更新将失败。检查实例的串行控制台输出并查找“空间不足”错误,以诊断此情况。您可以尝试以下方法进行恢复:

    • 调整实例的永久性启动磁盘的大小以增加磁盘大小。如果实例使用的操作系统映像支持自动调整大小,则此选项是最轻松的选项,因为在实例重启后,操作系统将自动调整根分区的大小以匹配新大小。
    • 如果您知道哪些文件正在消耗磁盘空间,则创建启动脚本以删除不必要的文件,为启动实例释放空间。重启实例,以执行脚本并清除文件。注意使用正确的命令并删除正确的文件。在您的实例启动并且您可以通过 SSH 连接到实例后,请设置回为之前的 startup-script 元数据项,以免脚本继续删除文件。
    • 如需了解如何访问实例磁盘,请参阅问题排查指南
  • 发起连接的用户的 $HOME$HOME/.ssh 目录权限错误。 Google 守护进程需要能够将公开 SSH 密钥存储在发起连接的用户的 $HOME/.ssh/authorized_keys 文件中。$HOME/.ssh 目录应该具有 Unix 权限 0700,而 authorized_keys 文件应该具有 Unix 权限 0600,两者都应归用户拥有。错误配置权限或所有权可能导致连接问题。要排除问题,请将用户名更改为新用户名,这样就可以创建新用户及其主目录。然后使用新用户进行连接,解决现有用户目录的权限问题。

复制/粘贴

您可以使用浏览器和平台支持的键盘快捷键复制并粘贴文本(Windows 和 Linux:Ctrl+C/Ctrl+V;macOS:Cmd+C/Cmd+V;Chrome 操作系统:Ctrl+Shift+V)。这些命令通常适用于大部分配置,但您的配置可能会呈现不同结果。

滚动

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

登录用户名

默认用户名

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

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

如果您启用了操作系统登录,并且 G Suite 管理员未设置用户名,则默认设置较长的用户名。该用户名包含网域信息。例如,如果电子邮件为 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
    
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档