Linux

Error - client_loop: send disconnect: Broken pipe

Вас тоже бесит постоянно отваливающееся соединение SSH? Нажимаешь Enter, а тебе вываливается «client_loop: send disconnect: Broken pipe». И снова подключаешься (((

За что отвечает директива ClientAliveInterval?

Значение этой директивы определяет через какой промежуток времени начиная с момента простоя клиенту будет отправлен запрос отклика. По умолчанию ClientAliveInterval равен 0, то есть сервер не будет ничего делать.

Простыми словами. У вас открыт терминал, вы подключены к серверу. Выполнили пару команд и ушли читать мануал. Допустим ClientAliveInterval у нас 30, это значит через 30 секунд после последней нашей активности, сервер проверит подключены ли мы к серверу, получив отклик от клиента, сервер не будет разрывать соединение.

Ну вроде как все понятно. Но! Чисто гипотетически мы можем быть подключены не через самое надежное соединение. Например через USB-модем в зоне со слабым сигналом. Предположим в какой-то момент сигнал упал, а сервер нам шлет запрос. Клиент его не получит. Тут на сцену выходит другая директива.

Директива ClientAliveCountMax

По умолчанию значение ClientAliveCountMax равно 3. То есть получается что сервер отправит нам максимум три запроса без подтверждения и уже только тогда закроет соединение.

Если ClientAliveInterval равен 30, а ClientAliveCountMax 3, то сервер закроет соединение через 90 секунд, то есть через полторы минуты, если наш модем за это время не восстановит соединение.

Как видите мы гибко можем манипулировать настройками этих двух директив в зависимости от обстоятельств.

Директива TCPKeepAlive

По умолчанию эта директива имеет значение yes. При активации ClientAliveInterval директиву TCPKeepAlive имеет смысл перевести в no. По сути сама по себе директива ничем особенным не помогает и не мешает.

Добавляем настройки

Строка в конфиге уже есть в Ubuntu Server 20.04 в файле /etc/ssh/sshd_config

Include /etc/ssh/sshd_config.d/*.conf

Поэтому просто создаем новый файл

sudo nano /etc/ssh/sshd_config.d/alive.conf

И уже туда вставляем

ClientAliveInterval 30
ClientAliveCountMax 30
TCPKeepAlive no

Я думаю этих настроек боле чем достаточно чтобы соединение долго не отваливалось в течении 15 минут. Выставляем сколько душе угодно.