Запирание SSH: подозревайте локальную проблему, не удаленную

Это могло бы работать на Вас:

sed 's/\t\+/,/g;s/^\|$/"/g;s/,/"&"/g;s/"\([0-9]\+\)"/"=\1"/g' file
2
14.01.2013, 15:04
1 ответ

Что-то вдоль цепочки приводит к таймауту неактивного соединения, так как SSH ничего обычно не отправляет, когда неактивный. Но, можно заставить его отправить сообщения периодически, когда неактивный. В версии 3.8 OpenSSH и:

$ ssh -oServerAliveInterval=60 myremotebox

Если Вы идете в ssh вручную к этому хосту часто, Вы, вероятно, хотите вставить его Ваш ~/.ssh/config файл вместо этого:

Host myremotebox
    ServerAliveInterval=60

Это говорит этому отправлять пустой пакет каждые 60 секунд после того, как ничто иное не было отправлено. Я нашел через большое разнообразие инфраструктуры, что этого достаточно для поддержания соединения.

В пред3.8 версиях OpenSSH у Вас нет этой опции, но существует слабая нейтрализация. Можно установить KeepAlive опция, которая использует сообщения проверки активности TCP. Путем это работает, зависимо от операционной системы, и часто изменение его поведения влияет на все приложения. Худшие, сетевые стеки обычно значение по умолчанию к отправке сообщений проверки активности TCP каждые 2 часа по умолчанию, таким образом, почти необходимо изменить значение по умолчанию, если Вы собираетесь использовать его этот путь, так как вещь, приводящая к таймауту Вашего соединения SSH, вероятно, имеет неактивный порог намного ниже, чем 2 часа.

Отметьте при чтении версии 3.8 + документы что это - то же самое как TCPKeepAlive опция. Когда они добавили "сервер живая" опция в 3,8, они переименовали KeepAlive кому: TCPKeepAlive отличать два.

6
27.01.2020, 21:55
  • 1
    , Вы будете думать, что у клиента должны быть мозги для знания, когда это - более не существующий tho. Принадлежит на TODO где-нибудь:/ –  goldilocks 14.01.2013, 15:29
  • 2
    , который Вы никогда не писали программе сетевого клиента, не так ли?:) Единственным путем можно обнаружить такую ситуацию, должен отправить пакеты проверки активности; это - почему TCP имеет эту функцию во-первых. Идеально, вещь, приводящая к таймауту соединения, отправила бы RST TCP в оба конца, но много инфраструктуры не делает этого. Это просто прекращает обращать внимание на пакеты на том соединении. Это типично для маршрутизаторов NAT. –  Warren Young 14.01.2013, 15:30
  • 3
    Взятая Точка - я на самом деле записал незначительных сетевых клиентов, и я предполагаю, что они подвергаются той же проблеме; сокеты TCP не всегда сообщают, как закрыто и могут просто блокировать/подвешивать, если другой конец не разъединяется правильно. Я имею также (гудок, гудок) записанный http сервер, и он должен привести к таймауту всех соединений для составления abherrant клиентов, какой AFAIK является функцией, характерной для всего http (и вероятно tcp) серверы. –  goldilocks 14.01.2013, 15:51
  • 4
    @goldilocks: Когда Ваш сервер HTTP приводит к таймауту соединений, он звонит close(2) на сокете, который вызывает или FIN TCP или RST TCP, в зависимости от того, как Вы делаете это. (Гудок, гудок, также.), Когда, скажем, маршрутизатор NAT просто останавливает уделение внимания переданному соединению, никакие пакеты не переходят к каждому концу, поэтому пока один из коллег не пытается отправить данные снова, это не собирается получать любое уведомление, что его соединение больше не работает. Это считают функцией, так как вещи, которые прерывают сети, действительно иногда становятся фиксированными, прежде чем любой будет заботиться. –  Warren Young 14.01.2013, 15:54
  • 5
    Хорошо, таким образом, маршрутизатор работает слой ниже tcp и если он прекратит передавать, то никакой конец не будет правильно уведомлен, и сокеты остаются открытыми; если Вы уничтожаете процесс произвольно на одном конце, который может произойти также. В этом случае сервер, который является или поточным, разветвленный или async/non-block, может привести к таймауту соединения, которое не отвечает на IO, но у исключительного клиента не может быть этой возможности. Это могло, хотя - но я могу понять, почему нельзя было бы потрудиться реализовывать его тот путь (больше проблемы, что это стоит). –  goldilocks 14.01.2013, 16:21

Теги

Похожие вопросы