Linux не вичерпує непрацюючі SSH-з'єднання. Ви можете залишити SSH-з'єднання відкритим на невизначений термін, і поки жодна кінцева точка не перезавантажена або отримано нову IP-адресу, з’єднання все ще працюватиме, коли ви отримаєте доступ до нього після тривалого простою.
Однак якщо є якісь середні скриньки (NAT, брандмауер тощо), вони, ймовірно, можуть вичерпати неробочі з'єднання. Результатом цього є те, що хоча з'єднання є живим на обох кінцях, дві кінцеві точки більше не можуть спілкуватися, оскільки середня скринька відмовляється пересилати будь-які пакети, поки клієнт SSH не відкриє нове з'єднання.
Якщо ви знаєте , тайм - аут middlebox, ви можете обійти цю проблему шляхом настройки ClientAliveInterval
в /etc/ssh/sshd_config
на сервері або ServerAliveInterval
в ~/.ssh/config
на клієнті. Для оптимального виявлення порушених з'єднань доцільно включити обидва налаштування. Це також виявить порушені з'єднання, коли будь-яка кінцева точка була перезавантажена або отримала нову IP-адресу.
Оскільки ви вказуєте на те, що час очікування іноді здається на кілька секунд, це може бути недостатньо для вирішення вашої проблеми. Дуже низький очевидний час очікування може бути викликаний перевантаженою або неправильно налаштованою CGN. Вам потрібно оглянути трафік у різних точках шляху зв'язку, щоб з’ясувати, чи відповідає CGN за збої.
Якщо виявиться, що збої спричинені тим, що ваш Інтернет-провайдер робить щось нерозумне, наприклад, навантаження на балансування завантаження через декілька CGN, які не поділяють стан з'єднання, ви не зможете самостійно усунути проблему, просто налаштувавши вашу конфігурацію SSH.
Якщо у вас застряг Інтернет-провайдер із ненадійною мережевою мережею, яку вони відмовляються виправити, єдині мені відомі варіанти - або оновити як клієнтські, так і серверні версії ядра з підтримкою MPTCP або використовувати тунельне рішення, розроблене для того, щоб миритися з спонтанним. зміни в картах портів на NAT.