ServerAliveCountMax в SSH

25

Что на самом деле делает ServerAliveCountMax в SSH?

Я пытаюсь убедиться, что когда я подключаюсь к своему серверу через SSH, соединение остается открытым в течение длительного периода времени, а не соединения, умирающего после короткого периода бездействия. Это пример

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

Я слышал из одного источника, что вышеуказанная настройка всегда будет отправлять ответ на сервер каждые 60 секунд, пока сервер получает этот ответ. Однако если по какой-либо причине ответ не поступит на сервер, он попытается отправить другое сообщение. Если это сообщение тоже не сработает, оно закроет соединение. (Я чувствую, что это неправильно)

Второй и третий источник , однако сказать что - то другое. Они утверждают, что сообщение будет отправляться на сервер каждые 60 секунд, если есть период бездействия, но он будет отправлять только через 2 запроса, а затем он закроет соединение.

Так что же делает ServerAliveCountMax?

Джон Кроуфорд
источник

Ответы:

32

Вы чувствуете, что «это неправильно» правильно. Обратитесь к странице :

 ServerAliveCountMax
         Sets the number of server alive messages (see below) which may be
         sent without ssh(1) receiving any messages back from the server.
         If this threshold is reached while server alive messages are
         being sent, ssh will disconnect from the server, terminating the
         session.  It is important to note that the use of server alive
         messages is very different from TCPKeepAlive (below).  The server
         alive messages are sent through the encrypted channel and there‐
         fore will not be spoofable.  The TCP keepalive option enabled by
         TCPKeepAlive is spoofable.  The server alive mechanism is valu‐
         able when the client or server depend on knowing when a connec‐
         tion has become inactive.

         The default value is 3.  If, for example, ServerAliveInterval
         (see below) is set to 15 and ServerAliveCountMax is left at the
         default, if the server becomes unresponsive, ssh will disconnect
         after approximately 45 seconds.  This option applies to protocol
         version 2 only.

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.
Майкл Хэмптон
источник
3
Страница людей ясно Intervalнабор , чтобы 0отключить его. Но это не ясно , если вы установите Maxна 0. Будет ли отправлять бесконечные живые пинг или нет?
GCB
мне не ясно, будет ли установка ServerAliveInterval 0 держать соединение открытым на неопределенное время или нет
Francesco
1
@Francesco По умолчанию соединение будет оставаться открытым до тех пор, пока один конец явно не закроет его.
Майкл Хэмптон
6

Сообщения сервера в режиме реального времени полезны, когда сервер 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 могут иметь другие результаты.

Дрю Чапин
источник