我每天通过 SSH 从 Linux 桌面连接到 AWS EC2 Amazon Linux 服务器,两年来该连接一直非常可靠,但在过去的几天里,我发现 SSH 命令行在输入第一个键盘字符后挂起,只有在全速上传时才会出现这种情况。
我说的“挂起”是指必须中止它,~.
而不是长时间等待响应。可能还有更详细的原因,但我只看到它在输入第一个字符后锁定,该字符在通常的延迟后已从服务器回显(即,它不仅仅是在 SSH 客户端中回显该字符)。
这种情况仅发生在同一台机器的大量(全带宽)上传期间。(我尚未使用我们网络上另一台机器的网络带宽进行测试。)在这些情况下,问题似乎是随机发生的,并且当上传带宽再次变得更可用时总会消失。
输入回车符不会导致挂起......例如,在短时间内输入几个空白行,然后快速尝试输入“ls”会在输入 L 后挂起。并且只有在第一个字符之后它才会锁定。
桌面:Ubuntu 14.04,带有 OpenSSH_6.6.1p1(Ubuntu-2ubuntu2.3,OpenSSL 1.0.1f 2014 年 1 月 6 日)。服务器:也运行 OpenSSH_6.6.1p1(版本 1.0.1k-fips)。
当前的选项设置对我来说一直都有效,即使在长时间密集使用上传带宽的情况下也是如此,直到最近:
服务器:/etc/ssh/sshd_config
ClientAliveInterval 15
ClientAliveCountMax 240
TCPKeepAlive no
客户端:〜/ .ssh /配置
ServerAliveInterval 15
ServerAliveCountMax 240
TCPKeepAlive no
下一步可能是增加或减少 15 秒间隔,但我不确定在这种情况下哪个更有意义。注意我已关闭 TCPKeepAlive,因为在客户端或服务器上启用此选项会导致连接大约每 5 分钟断开一次。我相信这是因为 TCP ACK 数据包不允许进入 AWS 子网(tcp-keepalive 在 ssh 中如何工作?)
无论读者是否使用 AWS,我都期待任何可以修复此问题的选项设置或更改。这是一个非常罕见的问题,但我认为这确实意味着我的上述 SSH 设置应该更加强大,并且答案可能对一般 AWS 用户非常有帮助。