【问题标题】:Amazon EC2 ssh timeout due inactivityAmazon EC2 ssh 由于不活动而超时
【发布时间】: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

【问题讨论】:

    标签: ssh amazon-ec2 amazon-web-services


    【解决方案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),那么以下操作应该非常方便:

    1. 远程进入您的 EC2 实例。

      ssh -i <YOUR_PRIVATE_KEY_FILE>.pem <INTERNET_ADDRESS_OF_YOUR_INSTANCE>
      
    2. 在实例的 SSH 服务器配置文件中添加“client-alive”指令。

      echo 'ClientAliveInterval 60' | sudo tee --append /etc/ssh/sshd_config
      
    3. 重新启动或重新加载 SSH 服务器,使其能够识别配置更改。

      • Ubuntu Linux 上的命令是..

        sudo service ssh restart
        
      • 但是,在任何其他 Linux 上,以下可能是正确的..

        sudo service sshd restart
        
    4. 断开连接。

      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 上的标准配方样式的答案格式需要可复制粘贴的指令,因此我犯了与您在未经测试的原始可复制粘贴中所做的相同的错误 [即,不使用交互式文本编辑器应用程序] 版本的我的说明。似乎已经消失的这个答案的老客户(??)解释了这一点;并且这个答案的修订历史 [stackoverflow.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 远程偶尔对等,以防止在您的连接上发生断开/重置。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        相关资源
        最近更新 更多