排查我的 SSH 会话为何挂起几秒钟

排查我的 SSH 会话为何挂起几秒钟

我通过 SSH 登录到我的开发箱(使用笔记本电脑上的 PuTTY),会话会定期挂起几秒钟,然后再次响应。我无法缩小范围。

网络设置:服务器和笔记本电脑连接到同一个路由器。

盒子上的服务:

  • 阿帕奇
  • 杯子
  • 失败2ban
  • mysqld
  • 桑巴
  • sendmail(用于带有 dkim 过滤器的 SMTP)
  • SSH(如前所述)

顶部输出

这是挂断事件发生几分钟后发生的事。

top - 02:16:14 up 15 days,  1:11,  1 user,  load average: 0.00, 0.03, 0.07
Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie
Cpu(s):  3.3%us,  1.5%sy,  0.0%ni, 92.5%id,  2.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   1017408k total,   950744k used,    66664k free,   359728k buffers
Swap:  4194300k total,    14012k used,  4180288k free,   191344k cached

有什么技巧可以解决这个问题?

答案1

我猜:

SSHv2 客户端每传输 X 分钟和/或 Y 字节后启动一次密钥重新交换(对于 PuTTY,默认值为 60 分钟和 1 GB)。密钥重新交换仅需 1-3 秒,但在密钥重新交换完成之前,无法通过 SSH 连接传输任何其他数据。

查找“启动密钥重新交换(原因)”在PuTTY的事件日志中。 (Ctrl Right Click在终端窗口上。)

事件日志

如果确实是这个原因,您可以:

  • 将特定算法(例如 DH 组 14)移至“组交换”之上连接 → SSH → Kex
  • 增加同一页面的重新交换超时时间

相关内容