Что на самом деле делает ServerAliveCountMax в SSH?
Я пытаюсь убедиться, что когда я подключаюсь к своему серверу через SSH, соединение остается открытым в течение длительного периода времени, а не соединения, умирающего после короткого периода бездействия. Это пример
Host *
ServerAliveInterval 60
ServerAliveCountMax 2
Я слышал из одного источника, что вышеуказанная настройка всегда будет отправлять ответ на сервер каждые 60 секунд, пока сервер получает этот ответ. Однако если по какой-либо причине ответ не поступит на сервер, он попытается отправить другое сообщение. Если это сообщение тоже не сработает, оно закроет соединение. (Я чувствую, что это неправильно)
Второй и третий источник , однако сказать что - то другое. Они утверждают, что сообщение будет отправляться на сервер каждые 60 секунд, если есть период бездействия, но он будет отправлять только через 2 запроса, а затем он закроет соединение.
Так что же делает ServerAliveCountMax?
Interval
набор , чтобы0
отключить его. Но это не ясно , если вы установитеMax
на0
. Будет ли отправлять бесконечные живые пинг или нет?Сообщения сервера в режиме реального времени полезны, когда сервер SSH настроен на закрытие соединений через некоторое время без трафика (например, поставщики общего веб-хостинга, которые предлагают доступ по SSH, почти всегда делают это). При установке этих двух параметров пакет отправляется каждую
ServerAliveInterval
секунду максимум несколькоServerAliveCountMax
раз, таким образом поддерживая сеанс в действии.Чтобы ответить на комментарии о неопределенности установки любой из этих опций
0
, я прочитал исходный кодopenssh
реализации, и вот что я вижу ...Установка
ServerAliveInterval
на0
НЕ будет отправлять пакеты, но будет поддерживать сеанс в течение неопределенного периода времени, предполагая, что соединение не прерывается из-за тайм-аута TCP и что сервер не настроен на удаление неактивных клиентов.Установка
ServerAliveCountMax
на0
имеет тот же эффект, что и установкаServerAliveInterval
на0
.Установка либо отрицательного значения, либо чего-либо большего
INT_MAX
(т. Е. 2 147 483 647) приведет к ошибке «целочисленное значение ...» .Установка
ServerAliveCountMax
междуINT_MAX/1000+1
(т. Е. 2 147 484) наINT_MAX
(т. Е. 2 147 483 647) также будет эквивалентна установке любого значения на0
.Таким образом, по сути, наибольшее время ожидания, которое вы можете получить (при отправке пакетов), составляет
INT_MAX/1000
(т.е. 2 147 483). С тайм-аутом1
и отсутствием трафика на сессиях это дало бы вам почти 25 дней.Очевидно, что другие реализации SSH могут иметь другие результаты.
источник