重启GCE实例后ssh连接超时

时间:2014-01-03 22:49:32

标签: google-compute-engine

任何人都可以告诉我为什么在重新启动Google Compute Engine实例后我的ssh连接超时了。我通过sudo reboot和Google Compute Engine Console重新启动实例,两者都是这样做的。

5 个答案:

答案 0 :(得分:5)

当操作系统关闭以重新启动时,所有网络连接都将关闭,包括SSH连接。从客户端来看,这看起来像连接超时。

答案 1 :(得分:2)

当您使用gcutil resetinstance时,它与按下物理主机上的电源按钮的功能相同。这不同于例如sudo reboot,因为前者没有给操作系统执行任何关闭的机会(比如关闭打开的套接字,刷新缓冲区等),而后者则有序关闭。

如果主机仍然是ssh-able,您可能更愿意登录到实例进行重新启动而不是使用gcutil resetinstance; resetinstance(或GUI中的“重新启动实例”按钮)是硬重置,允许您从内核崩溃或SSH失败中恢复。

更详细:

在OS启动的重新引导期间(如sudo reboot),操作系统执行许多清理步骤,然后转到运行级别6(重新启动)。这会导致/etc/init.d中的所有脚本运行,然后正常关闭。在正常关闭期间,sshd将被杀死; sshd可以捕获kill信号以关闭所有打开的套接字。关闭套接字将导致发送FIN TCP数据包,开始有序的TCP拆分(ssh客户端中的“连接已关闭”消息)。或者,如果sshd只是退出,内核会在所有打开的TCP套接字上发送RST(重置)数据包,这将导致ssh客户端上出现“连接重置”消息。关闭所有进程后,内核将确保将页缓存中的所有脏页刷新到磁盘,然后执行两个或三个机制中的一个以触发BIOS重新引导。 (ACPI,键盘控制器或三重故障。)

当触发外部重置时(例如通过resetinstance API调用或GUI),VM将立即进入最后一步,操作系统将无法正常执行任何关闭操作上面的步骤。这意味着您的ssh客户端不会收到如上所述的FINRST数据包,并且只会在远程服务器停止响应时通知连接已关闭。 (“连接超时”)

答案 2 :(得分:2)

感谢Brian Dorsey,E。Anderson和vgt回答我的问题。问题是其他问题。每次我重新连接以前的连接时,我都会使用“eth0”接口和名为“br0”的新brigde接口之间的brigde-util实用程序建立以太网桥。通过sudo reboot或GCE控制台重置实例后,ssh连接停止工作。

但是,如果我没有启动以太网桥,则实例会通过两种方法重新启动。

答案 3 :(得分:0)

与Brian的答案略有正交。要正常重新启动GCE VM,您可以使用:

gcutil resetinstance

答案 4 :(得分:0)

如果您的实例图片是CentOS,请尝试删除selinux。

sudo yum remove selinux*