【问题标题】:Google Cloud instance can't be accessed via SSH after cloning克隆后无法通过 SSH 访问 Google Cloud 实例
【发布时间】:2018-04-29 05:45:26
【问题描述】:

我在这里急需帮助。我有一个托管许多网站的计算引擎实例。这些是我采取的步骤:

  1. 转到 Compute Engine > 快照并为我的实例拍摄快照

  2. 点击新创建的快照,然后点击创建实例。

  3. 新实例拥有当前运行实例的所有配置

然后当我尝试通过 SSH 访问新实例时,它不起作用。错误信息:

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

点击了解更多,我会转至https://cloud.google.com/compute/docs/ssh-in-browser#ssherror

实例正在启动,但 sshd 尚未运行 - 不知道如何检查

实例未运行 sshd - 也不知道如何检查

sshd 正在侦听您要连接的端口以外的端口 - 我当前的实例在端口 22 上运行 ssh,所以我想这没问题?

没有防火墙规则允许在端口上进行 SSH 访问 - 同样,我当前的实例正在运行 ssh,所以我不认为这是因为防火墙,对吧?

允许 SSH 访问的防火墙规则已启用,但未配置为允许来自 GCP Console 服务的连接。 - 同上

实例已关闭 - 实例仍在运行。

奇怪的是,如果我从头开始创建一个新实例,然后按照上述步骤克隆到一个新实例,那么这个新实例可以通过 SSH 正常访问。

如果可能的话,谁能告诉我如何解决这个问题?或者告诉我如何查看日志,检查出现了什么问题等,因为我试图用谷歌搜索,但对所有的行话或在哪里可以找到特定的东西感到很困惑。对不起,文字墙。谢谢

**

编辑#1

**:我得到了 Google 的技术支持。下面的步骤可能对其他人有帮助,但对我没有帮助,因为当我到达第 7 步时,我一直等待并且无法进入登录页面。

1.) 转到 VM 实例页面并单击您的 VM 的实例名称。

2.) 点击页面顶部的编辑按钮。

3.) 在自定义元数据下,单击添加项目。

4.) 将“Key”设置为“startup-script”并将“Value”设置为此脚本:

#! /bin/bash 

useradd -G sudo USERNAME 

echo 'USERNAME:PASSWORD' | chpasswd

注意:将 USERNAME 和 PASSWORD 的值更改为您选择的名称和密码。

5.) 通过选中 SSH 按钮下方的框启用“启用连接到串行端口”。

6.) 单击保存,然后单击页面顶部的重置。等待一段时间让实例重新启动。

7.) 单击页面中的“连接到串行端口”。在新窗口中,您可能需要稍等片刻,然后按一次键盘的 Enter;然后,您应该会看到登录提示。

8.) 使用您提供的用户名和密码登录。

注意:为了您的数据安全,请不要分享您的任何密码和用户名。

由于上述步骤对我没有帮助,Google 支持代表查看了日志但没有发现任何问题,因此她建议按照本指南 https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh#use_your_disk_on_a_new_instance 调试 SSH,我将在有时间时进行。感觉自己在写论文。会持续发布

【问题讨论】:

  • 别慌,只要不删除磁盘,数据就不会丢失。一些建议:1)您可以尝试克隆损坏的实例吗? 2) 创建另一个实例,通过内部 IP ssh 到损坏的实例并检查 sshd。
  • 不,我并不恐慌,谢谢:)。我正在谈论我当前活动实例的克隆,尽管如果我突然无法 ssh 到我的活动实例,我会感到恐慌。要验证:1)您可以尝试克隆损坏的实例吗?损坏的实例是从实时实例中克隆的,我尝试从实时实例中克隆很多,但克隆的实例从未对我有用 2. 创建另一个实例,通过内部 IP SSH 到损坏的实例并检查 sshd 我将尝试用谷歌搜索如何去做这个。截至目前,我正在联系 Google 支持,看看他们是否可以帮助我解决这个问题。手指交叉

标签: google-compute-engine


【解决方案1】:

您可以遵循的故障排除步骤是:

  1. 使用serial console 查看您的实例日志并检查您从快照创建的新实例是否无法启动到启动 ssh 守护程序的适当运行级别。如果 sshd 未启动,您将无法通过 ssh 访问您的实例。
  2. 如果不影响生产,您可以尝试重启实例并再次尝试获取 ssh 访问权限。可能是某些问题阻止了实例正常启动,重新启动它可以解决它。

  3. 您可以尝试从快照创建另一个 VM 实例,以防之前的实例未正确创建。

  4. 如果从快照创建新的 VM 实例不能解决问题,则可能是快照本身没有正确创建。您可以阅读此documentation guideUnderstanding snapshot best practices 部分,并尝试从中创建另一个快照和 VM 实例。

【讨论】:

  • 感谢 JMD,1. 我得到了 Google 代表的支持,她指导我了解如何使用串行控制台(我已将步骤添加到我的问题中,因此它可能对某人有所帮助)。 2 + 3。我已经做了很多。我什至一次又一次地删除并克隆了它。 4. 我会尝试再看一遍指南
【解决方案2】:

我遇到了同样的问题,经过大量搜索,我从 ServerFault 的用户 Peripheral 那里找到了一个对我有用的答案。

我找到了适合我的解决方法。最近的更新有一个已知问题,它从 iptables 中删除了默认网关。要修复它,我必须转到实例并选择编辑。向下滚动,在自定义元数据下输入以下内容:

key: startup-script value: route add default gw <gatewayIP> eth0

保存并重新启动虚拟机。

Source

所有功劳归他/她所有,只是想分享以帮助其他人更快地找到他们的解决方案。

【讨论】:

  • 我花了一点时间才弄明白——默认网关的 IP 是子网主要 IP 范围内的第二个地址。例如,如果主 IP 范围为 10.1.2.0/24,则默认网关 IP 为 10.1.2.1 VPC docs
【解决方案3】:

我有同样的问题。我最终认为这是因为我附加了一个永久磁盘,在 /etc/fstab 文件中添加了一个条目。该条目应该在实例重启时自动挂载附加的磁盘。

但是,当我创建启动磁盘的快照时,我没有删除 /etc/fstab 条目。因此,从该快照创建新实例总是会导致启动错误,因为脚本会尝试挂载未附加的磁盘。 此信息存在于documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多