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】:
考虑使用screen
或byobu
,问题可能会消失。更重要的是,即使连接丢失,您也可以通过screen -r
或byobu -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 由于不活动而超时的主要内容,如果未能解决你的问题,请参考以下文章
为EC2 Amazon Linux实例设置SFTP Sublime Text 3