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
Сторінка "man" доступна 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(тобто 2147483). Із тимчасовим 1та безперебійним трафіком на сеанси ви отримаєте майже 25 днів.

Очевидно, що інші реалізації SSH можуть мати різні результати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.