Ситуация такая: есть ssh-клиент (Ubuntu 14.04) и ssh-сервер (Debian 7). Между ними существует куча сетей. SSH-соединение устанавливается легко (и быстро), работает отлично и быстро.
Однако, если соединение остается бездействующим в течение некоторого времени, происходит странная вещь - соединение все еще живо: я могу вводить команды, запускать их, и команды будут выполняться на сервере, но если одна из этих команд или сумма многократных выполнений производит слишком много данных (достаточно всего нескольких строк текста), затем соединение зависает и через некоторое время (когда я снова что-то нажимаю) отключается с разрывом канала. Во время зависания и сервер, и клиент обрабатывают соединение как все еще открытое.
Соединение не переходит в это состояние, если там запущено что-то вроде «top», чтобы постоянно отправлять данные.
Я перепробовал всевозможные варианты отладки и журналы, но не вижу подсказок, объясняющих, что происходит. Самая запутанная часть заключается в том, что соединение еще некоторое время работает, прежде чем фактически зависнет. Любой намек приветствуется.
У вас наверняка есть Проблема MTU в вашем соединении между вашим клиентом и сервером.
Иногда это может быть обнаружено на уровне маршрутизатора, или это может быть проблема брандмауэра (разрешение фрагментированных пакетов помогает в некоторых случаях). Вы часто увидите это, если запустите что-то вроде dmesg
(с большим объемом вывода) по сравнению с командами меньшего размера.
Вы управляете промежуточной сетью? Вы можете сказать об этом тому, кто за это несет ответственность?
Если они находятся в одной сети, это может быть проблема с jumbo-кадрами, частным случаем проблемы с mtu.
Большое количество быстрых выходов заставляет большие пакеты.