【问题标题】:Can't SSH into Google Cloud VM无法通过 SSH 连接到 Google Cloud VM
【发布时间】:2021-05-29 16:20:58
【问题描述】:

我能够成功地通过 SSH 连接到我昨天设置的 Google Cloud VM,但今天由于某种原因我不能,而且我没有弄乱任何设置,尤其是防火墙设置。它现在一直给我这些错误:

通过 Cloud Identity-Aware 代理连接失败 代码:4003 原因:连接后端失败 您可以在不使用 Cloud Identity-Aware Proxy 的情况下进行连接。

然后,当我单击“不使用身份识别代理进行连接”时,我收到以下错误:

连接失败 我们无法连接到端口 22 上的 VM。详细了解此问题的可能原因。

我不知道发生了什么。昨天还好好的,现在不行了。

【问题讨论】:

  • 目标虚拟机是否运行 Linux、Windows 或其他系统?您在看到错误的工作站上运行什么特定命令?您的源工作站在哪里(是本地物理工作站还是云托管虚拟机)?
  • 我在 Google Cloud 上运行 Ubuntu 16.04,我是 VM 实例,我尝试通过单击“连接”下的 SSH 来通过 SSH 连接
  • 您是否以任何方式修改了 Compute Engine 实例?例如,如果您使用默认设置启动一个全新的 Ubuntu 16.04 实例,您是否可以通过单击 SSH 连接按钮从 GCP 控制台通过 SSH 连接到该实例?
  • 我所做的只是安装一个执行服务器,我一直在努力工作,包括确保安全。
  • 如果sshd 出现问题(端口 22 正常,但没有任何运行)或端口 22 被阻塞,则可能发生这种情况。谷歌有一篇关于在 GCP 中调试 SSH 问题的文章。完成后请按照以下步骤更新您的帖子:cloud.google.com/compute/docs/troubleshooting/…

标签: google-cloud-platform ssh google-compute-engine error-code


【解决方案1】:

首先,尝试禁用 Cloud Identity-Aware Proxy 并通过 Web 控制台连接到 VM 实例。

之后,查看日志:

  • 转到Compute Engine -> VM instances -> 点击NAME_OF_YOUR_VM -> 在VM instance details 找到日志部分并点击Serial port 1 (console)
  • 重启您的虚拟机实例。
  • 检查完整的启动日志是否有任何错误或/和警告。

如果您的 VM 实例未启动,请按照文档 General troubleshooting 验证您的磁盘是否具有有效的文件系统和有效的主引导记录 (MBR)。

如果您发现与磁盘空间相关的错误/警告,您可以尝试根据文档Resizing a zonal persistent disk 调整其大小,也可以根据文章Recovering an inaccessible instance or a full boot disk

如果实例完全耗尽磁盘空间或未运行 Linux 来宾环境,然后自动调整根目录的大小 文件系统是不可能的,即使你增加了 支持它的永久性磁盘。如果您无法连接到您的实例, 或者您的启动盘已满且无法调整大小,您必须创建一个 新实例并从快照重新创建启动磁盘以调整其大小。

否则尝试通过串行控制台访问您的 VM 实例:

  • Enable serial console connectiongcloud 命令:

      gcloud compute instances add-metadata NAME_OF_YOUR_VM_INSTANCE \
      --metadata serial-port-enable=TRUE
    

    或转到Compute Engine -> VM instances -> 点击NAME_OF_YOUR_VM_INSTANCE -> 点击EDIT -> 转到Remote access部分并检查Enable connecting to serial ports p>

  • 创建临时用户和密码以登录:关闭您的 VM 并通过在 Custom metadata 部分添加键 startup-script 和值来设置 startup script

      useradd --groups google_sudoers tempuser
      echo "tempuser:password" | chpasswd
    

    然后启动你的虚拟机。

  • Connect to your VM via serial portgcloud 命令:

      gcloud compute connect-to-serial-port NAME_OF_YOUR_VM_INSTANCE
    

    或转到Compute Engine -> VM instances -> 点击NAME_OF_YOUR_VM_INSTANCE -> 并点击Connect to serial console

  • 检查出了什么问题。

  • Disable access via serial portgcloud 命令:

      gcloud compute instances add-metadata NAME_OF_YOUR_VM_INSTANCE \
      --metadata serial-port-enable=FALSE
    

    或转到Compute Engine -> VM instances -> 点击NAME_OF_YOUR_VM_INSTANCE -> 点击EDIT -> 转到Remote access部分并取消选中Enable connecting to serial ports。请记住,根据文档Interacting with the serial console

    注意:交互式串行控制台不支持基于 IP 的访问 IP 白名单等限制。如果启用交互式 实例上的串行控制台,客户端可以尝试连接到该实例 来自任何 IP 地址的实例。任何人都可以连接到该实例,如果 他们知道正确的 SSH 密钥、用户名、项目 ID、区域和 实例名称。使用防火墙规则控制对网络的访问 和特定的端口。

如果您无法通过串行控制台进行连接,请尝试按照文档Troubleshooting SSH 部分Inspect the VM instance without shutting it down 并检查另一个 VM 上的 VM 磁盘。同样的方式,您可以将数据传输到另一个工作的 VM 实例。

【讨论】:

    【解决方案2】:

    我在运行 composer update 时遇到了同样的问题。

    在我的情况下,重新启动 VM-Instance 已解决。

    【讨论】:

    • 如何重启虚拟机实例?当您重新启动 VM-Instance 时,您是否丢失了主目录中的任何文件?
    • 在这个问题上挣扎了 50 分钟,这个简单的事情就奏效了……
    【解决方案3】:

    根据这些错误消息,我猜您的项目有 Identity-Aware Proxy (IAP) enabled,这有时可能会影响通过 SSH 进入实例的能力,具体取决于配置。

    为了排除这种情况,您可以尝试以下方法:

    【讨论】:

    • 似乎即使在创建新规则之后,IAP 也没有被激活。在 IAP 页面的 ssh 连接选项卡上收到警告