3

我一直在通过我的 macOS 上的 gcloud ssh 连接到 Google Cloud VM 实例:

$ gcloud compute ssh [username]@[instance]

从一周前开始,连接将在大约 60 秒的空闲连接后断开并返回:

Connection to [my_external_ip] closed by remote host.
Connection to [my_external_ip] closed.
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

我在我的 macbook 和 VM 上都将 TCP keepalive 时间配置为 30 秒。但这并没有解决问题。

知道如何延长连接持续时间吗?

4

1 回答 1

0

这不太可能是您的超时设置的问题,但更可能是您的防火墙规则或路由的问题。

首先,我建议检查您的防火墙规则并确保您有一个打开端口 22 的入口防火墙规则。如果有,请检查此规则的配置,特别是:

  • 检查“源过滤器”中的 IP 范围。该范围是否包括您家用计算机的 IP 地址?出于测试目的,为确保它确实如此,您可以暂时将其设置为 0.0.0.0/0 以包括所有 IP 地址。

  • 检查“目标”下拉菜单。此设置是应用于“网络中的所有实例”还是设置为“指定的目标标签”?如果您已将其设置为“指定的目标标签”,请确保将相同的标签添加到实例的“网络标签”部分,否则防火墙规则将不适用于实例并允许 SSH 流量。

  • 确保此规则具有比任何其他可以抵消它的规则更高的优先级(当我说更高的优先级时,我的意思是更低的数字,例如,优先级为 1000 的规则比优先级为 20000 的规则具有更高的优先级)。

如果上述方法不能解决问题,请运行以下命令检查路由:

gcloud compute routes list

确保有一个包含以下内容的条目:

 default          0.0.0.0/0       default-internet-gateway 

编辑

如果您有时能够通过 SSH 连接到实例,但随后连接断开,则日志或串行控制台中可能有一些有用的信息。

您可以通过单击 GCP Console 中的实例名称,然后单击“Serial port 1”来访问串行控制台。当您通过 SSH 连接到实例时,有关 SSH 会话的信息会填充串行控制台输出(可以通过点击页面顶部的“刷新”来刷新)。有关会话结束的信息也会填充串行控制台。关于会话为何在此输出中结束,可能有一些有用的信息/线索。

检查实例上 SSH 守护程序的状态并重新启动它以查看是否有区别可能也是值得的:

检查 sshd 的状态:

systemctl status sshd

重启sshd:

sudo systemctl restart sshd
于 2018-03-08T09:59:11.847 回答