SSH 能登录,htop 刷几行就卡死

🛠️工程和算法 0 评 10 度

现象

KEX 问题修好后,SSH 能正常登录。但一跑 htop、top、vim 全屏刷新 就出问题:

  • 前几行正常显示
  • 然后画面停住,不再更新
  • 简单 echols 没问题
  • 输出一密集就卡

原因

SSH 走 嵌套连接ProxyJump / ProxyCommand)时,流量路径是:

本机 SSH 加密通道 → stdio-forward 转发 → 目标机 SSH

两层加密叠在一起。TUI 程序(htop 等)会 高频发送大量终端 escape 序列,stdio-forward 通道缓冲区小,来不及消化就 背压阻塞——表现就是画面刷几行后卡住。

跟 KEX 算法、密钥、sshd 无关,是 连接建立之后 的数据通道问题。

解决方案

1. 开压缩(首选,改 config 即可)

Host *
    Compression yes
    IPQoS throughput
    ServerAliveInterval 30
    ServerAliveCountMax 3

重复性终端输出压缩率高,嵌套 SSH 下效果明显。实测 50 行宽输出从 卡死 → 2~4 秒跑完

2. 减少嵌套层数

能直连就直连,必须中转时尽量 只跳一层。每多一层 SSH,TUI 吞吐掉一半。

3. 交互类程序用 mosh

mosh user@host

UDP 协议,专为高延迟/高丢包/频繁刷新的终端设计,比 SSH 跑 htop/vim 稳得多。

4. 远端开 tmux 再跑

ssh host
tmux
htop

全屏刷新发生在 tmux 内部,跨 SSH 的 escape 序列量大幅减少。

怎么判断是不是这个问题

# 小数据量:正常
ssh host 'for i in $(seq 1 20); do echo ok-$i; done'

# 大数据量:卡住
ssh host 'for i in $(seq 1 50); do echo $(printf %.0sA {1..120}); done'

前者秒回,后者卡住 → 就是通道吞吐问题,加 Compression yes 再试。


快来做第一个评论的人吧~