Amazon EC2 ssh 由于不活动而超时

Posted

技术标签:

【中文标题】Amazon EC2 ssh 由于不活动而超时【英文标题】:Amazon EC2 ssh timeout due inactivity 【发布时间】:2011-11-04 19:37:44 【问题描述】:

我可以通过 SSH 向我的 EC2 实例发出命令,这些命令会记录我应该长时间关注的答案。糟糕的是,由于我不活动,SSH 命令在一段时间后关闭,我不再能够看到我的实例发生了什么。

如何在 Amazon Linux 机器中禁用/增加超时?

错误如下所示:

Read from remote host ec2-50-17-48-222.compute-1.amazonaws.com: Connection reset by peer

【问题讨论】:

【参考方案1】:

您可以在计算机主目录的 ~/.ssh/config 文件中设置保活选项:

ServerAliveInterval 50

Amazon AWS 通常会在您不活动 60 秒后断开连接,因此此选项将每 50 秒 ping 一次服务器并让您无限期地保持连接。

【讨论】:

此设置在客户端,而不是 AWS 服务器,对吧?在答案中值得一提。另外,你确定60秒吗?我的连接超时肯定需要更长的时间。 是的,它在客户端,在您的 *nix 计算机上的 ssh 配置中。我会更新答案,谢谢!对我来说实际上是 120 秒,但我有一个同事在另一个地区工作,他在 60 秒内超时。不要问我为什么,我不在亚马逊工作!这就是为什么我说“通常”是 60 秒。我认为推荐 50 秒是谨慎的做法,因为 1. 它适用于几乎所有人,并且 2. 它不会破坏您的网络连接,它只是一个 ping。你可以放 10 秒,它仍然足够轻,不会落入某种服务器禁令。 非常感谢。在不活动 1 分钟后一直重新连接是很痛苦的。它帮助了我。 完美答案!要展开,如果文件尚未由系统创建,则该文件应为 chmod 644 .ssh/config 这个答案通过两个更有用的设置进一步解释了这一点:unix.stackexchange.com/questions/3026/…【参考方案2】:

假设您的 Amazon EC2 实例运行的是 Linux(并且很可能您使用的是 SSH-2,而不是 1),那么以下操作应该非常方便:

    远程进入您的 EC2 实例。

    ssh -i <YOUR_PRIVATE_KEY_FILE>.pem <INTERNET_ADDRESS_OF_YOUR_INSTANCE>
    

    在实例的 SSH 服务器配置文件中添加“client-alive”指令。

    echo 'ClientAliveInterval 60' | sudo tee --append /etc/ssh/sshd_config
    

    重新启动或重新加载 SSH 服务器,使其能够识别配置更改。

    Ubuntu Linux 上的命令是..

    sudo service ssh restart
    

    但是,在任何其他 Linux 上,以下可能是正确的..

    sudo service sshd restart
    

    断开连接。

    logout
    

下次您通过 SSH 连接到该 EC2 实例时,那些超级烦人的频繁连接冻结/超时/断开应该有望消失。

这对 Google Compute Engine 实例也有帮助,它们具有类似烦人的默认设置。

警告:请注意,TCPKeepAlive 设置(也存在)与 ClientAlive 设置有细微差别,但又明显不同。 strong> 我在上面建议的设置,并且从默认值更改 TCPKeepAlive 设置实际上可能会损害您的情况而不是帮助。

更多信息在这里:http://man.openbsd.org/?query=sshd_config

【讨论】:

或者只是:echo 'ClientAliveInterval 60' >> /etc/ssh/sshd_config 或者取消注释#ClientAliveInterval @DimiDak 你真的试过你建议的命令吗?可能和你一样,我总是只用 nano 来做这样的编辑;但是 Stack Overflow 上的标准配方样式的答案格式需要可复制粘贴的指令,因此我犯了与您在未经测试的原始可复制粘贴中所做的相同的错误 [即,不使用交互式文本编辑器应用程序] 版本的我的说明。似乎已经消失的这个答案的老客户(??)解释了这一点;并且这个答案的修订历史 [***.com/posts/24360827/revisions] 在某种程度上也确实如此。 有什么问题 --> echo 'ClientAliveInterval 60' >> /etc/ssh/sshd_config ? 在centos7 AMI上重启sshd的命令是systemctl reload sshd【参考方案3】:

考虑使用screenbyobu,问题可能会消失。更重要的是,即使连接丢失,您也可以通过screen -rbyobu -r 重新连接并恢复对之前相同终端屏幕的访问。

byobu 是对屏幕的增强,并且有一组很棒的选项,例如 EC2 成本的估算。

【讨论】:

这两种方法有没有好的教程?两者似乎都没有预装在 EC2 主机上,从我读到的内容来看,您应该在服务器上运行它们。 我更喜欢下面的@brandnewcode 的ServerAliveInterval。我一直在使用tmux,它类似于screen。 tmux 的一个意想不到的好处是状态栏上的时钟每分钟更新一次,从而保持连接打开。 tl;dr:tmux 开始会话,tmux a 重新连接。 这不应被标记为正确答案,因为它回答了不同的问题。 mauriciomdea 给出的最佳解决方案之一。无需重新连接。像魅力一样工作。 对我来说,这不是 ssh 失去连接的解决方案。这是一种解决方法。 Gnu 屏幕有助于在断开连接时保持日志可用,但它不能保持连接运行。【参考方案4】:

我知道对于 Putty,您可以使用 keepalive 设置,这样它就会经常发送一些活动数据包,以免“空闲”或“陈旧”

http://the.earth.li/~sgtatham/putty/0.55/htmldoc/Chapter4.html#S4.13.4

如果您正在使用其他客户端,请告诉我。

【讨论】:

【参考方案5】:

您可以通过以下设置使用 Mobaxterm,免费的选项卡式 SSH 终端-

Settings -> Configuration -> SSH -> SSH keepalive

更改设置后记得重启 Mobaxterm 应用。

【讨论】:

【参考方案6】:

我有 10 多个基于 Amazon Linux AMI 的自定义 AMI,而且我从未遇到过由于 SSH 连接不活动而导致的任何超时问题。我的连接保持打开超过 24 小时,没有运行一个命令。我认为 Amazon Linux AMI 中没有内置任何超时。

【讨论】:

我认为有更多的人超时就足够了,而且您没有超时的一个可能原因是您的 ssh 客户端设置可以 ping 远程偶尔对等,以防止在您的连接上发生断开/重置。

以上是关于Amazon EC2 ssh 由于不活动而超时的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux中增加SSH连接超时的时间

为EC2 Amazon Linux实例设置SFTP Sublime Text 3

由于不活动而导致会话超时[重复]

与ec2的SSH连接连接超时[关闭]

AWS EC2:ssh:连接到主机 10.0.0.206 端口 22:连接超时

如何使用超时设置解决 AWS ELB/EC2 HTTP 503?