因此,基本上在工作时,我们每次都会断网几秒钟,这足以导致我们的 SSH 隧道、VoIP 通话中断等。我设置了一个 cronjob,我自己的脚本来检测重大中断(持续时间超过一分钟),但我无法检测到这些持续数秒的中断。
通常白天我会使用 SSH 隧道连接到我们的其中一台服务器。此连接持续一整天,因此我打算创建一个脚本,创建与同一台服务器的另一个连接,在与服务器的连接中断时进行记录,然后重新建立连接以进行进一步的记录。使用基本 bash 可以实现这一点吗?
答案1
有多种方法可以解决 ssh 会话连接丢失的问题。
首先,您可能希望设置选项 ServerAliveInterval、ClientAliveInterval 和 ClientAliveCountMax。ServerAliveInterval 是客户端在向服务器发送空数据包(以保持连接有效)之前等待的秒数,通常值为 60。ClientAliveInterval 是服务器在向客户端发送空数据包之前等待的秒数。最后,ClientAliveCountMax 是客户端在连接中断之前允许保持连接有效的 ClientAliveInterval 数;默认值为 3,表示 ClientAliveInterval 时间间隔的三倍。
或者,你可以使用莫什,手机外壳,它……
允许漫游,支持间歇性连接,并提供智能本地回显和用户按键的行编辑。Mosh 是 SSH 的替代品。它更强大、响应更快,尤其是在 Wi-Fi、蜂窝和长距离链路上。Mosh 是免费软件,适用于 GNU/Linux、FreeBSD、Solaris、Mac OS X 和 Android。
然后你可以使用自动SSH而不是 ssh:
autossh - 自动重启 SSH 会话和隧道
选择哪种方式主要取决于口味。至于我,我用的是自动SSH对于我希望永久通行的隧道,尤其是反向隧道;我使用莫什对于真正灾难性的连接,例如从飞机或汽车上通过 ssh 进入我的实验室时。对于所有其他情况,明智地选择上述 openssh 参数即可:例如,我的 .ssh/config 文件包含以下几行:
Host *
ServerAliveInterval 60
IdentitiesOnly yes
对于服务器也是如此,在文件中/etc/sshd_config。
顺便说一句,为了长时间监控你的连接,你可以使用地铁(= My TraceRoute),traceroute 和 ping 的智能组合,它会每隔一定秒(默认值 = 1 秒)对给定站点执行一次跟踪路由,并将平滑地更新成功 ping 的统计信息,让您有机会确定至少平均正常运行时间分数,但不是它们的分布。
答案2
最后,我对脚本做了一些调整,使其基本上连续运行并在失去连接时开始记录,而不是寻找丢失的连接:
https://github.com/NobleUplift/NetCheck
但实际上,我们只是需要切换 ISP。