Соединения SSH зависают с сообщением «Ошибка записи: сломанный канал»

12

Я подключаюсь к CentOS 5.5 через SSH с компьютера с Ubuntu 11.04.

Соединение, кажется, работает должным образом, когда оно находится в активном использовании (то есть без задержки или потери), но если оно какое-то время остается неактивным, оно зависает и перестает отвечать на запросы. В конце концов будет возвращено сообщение об ошибке «Ошибка записи: сломанная труба», и я вернусь к приглашению моей локальной машины.

Что я могу сделать, чтобы помочь отладить это, выяснить, что происходит, и решить эту проблему? Будучи разработчиком, это делает мою жизнь болью от необходимости постоянно подключаться.

Стивен Р.К.
источник

Ответы:

15

Похоже, что конфигурация SSHD блока CentOS не настроена на выполнение клиентского KeepAlive.

Оставьте эти две строки в вашем sshd-конфиге CentOS (/ etc / ssh / sshd_config), перезапустите его и наслаждайтесь!

KeepAlive yes
ClientAliveInterval 60

Пока вы работаете над этим, я бы порекомендовал использовать gnu screenдля поддержки вашей сессии на стороне CentOS.

yuriismaster
источник
1
KeepAlive, как было переименовано в TCPKeepAlive, можно оставить со значением по умолчанию, равным yes. ClientAliveInterval должно быть достаточно. См man sshd_config.
YPID
9

Фактический ответ почти всегда состоит в том, что у вас есть какое-то устройство NAT на пути, обычно брандмауэр, таблицы состояний которого имеют довольно агрессивный тайм-аут. Поскольку вы оставляете ваше ssh-соединение бездействующим в течение нескольких периодов времени, устройство NAT «забывает» сопоставление между вашим внутренним адресом и номером порта источника, и вашим эфемерным внешним NATted адресом и номером порта.

Когда вы позже попытаетесь что-то сделать в этом окне ssh, вам будет назначена новая эфемерная пара адрес / порт, о которой целевой сервер ssh не знает и не отвечает; позже достигается некоторое локальное время ожидания, и соединение прерывается на вашей локальной машине.

Практическое решение этой проблемы заключается в том, чтобы сделать именно то, что предлагает yuriismaster: включить KeepAlives (которые гарантируют регулярный трафик для «перетаскивания» этой записи таблицы состояний) и использовать screenна удаленной стороне (чтобы сохранить состояние в случае, если что-то будет сброшено). Я публикую этот ответ только потому, что вы спросили, что происходит, и что с этим делать. Надеюсь, это проясняет, почему предложения yuriismaster являются хорошими.

Безумный Шляпник
источник
Это имеет смысл! У нас есть NAT с настройкой DMZ для этой коробки. Я попробую настройку тайм-аута и посмотрю, сработает ли это для меня. Спасибо :)
Стивен RC
Я принимаю ваши, поскольку вы помогли мне понять причины проблемы. Но кредит должен пойти к @yuriismaster для исправления.
Стивен Р.К.
Валорин: безусловно, это так, и он был первым. Честно говоря, я думаю, он заслуживает большего, чем я; но это ваш вопрос, поэтому он должен идти так, как вы считаете нужным. Спасибо за отзыв, так или иначе.
MadHatter