Что означает сообщение Broken pipe в сеансе SSH?

Иногда мой сеанс SSH отключается с сообщением « Write failed: Broken pipe сообщение». Что это значит? И как я могу открыть сеанс?

Я знаю о screen , но это не тот ответ, который я ищу. Я думаю, что это вариант конфигурации sshd .

Возможно, ваш сервер закрывает слишком длинные простоя. Вы можете обновить либо ваш клиент ( ServerAliveInterval ), либо ваш сервер ( ClientAliveInterval )

  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. ClientAliveInterval Sets a timeout interval in seconds after which if no data has been received from the client, sshd(8) will send a message through the encrypted channel to request a response from the client. The default is 0, indicating that these messages will not be sent to the client. This option applies to protocol version 2 only. 

Чтобы обновить сервер (и перезапустить sshd )

 echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config 

Или на стороне клиента:

 echo "ServerAliveInterval 60" >> ~/.ssh/config 

Альтернативным решением было бы использовать mosh – мобильную оболочку . В отличие от ssh, он подключается через UDP и поддерживает роуминг. Вы можете начать свою сессию дома, приостановить работу своего ноутбука, взять его на работу / друзей / где бы вы ни располагали интернет, отказаться от своего ноутбука и продолжать работать так, как будто ничего не произошло. Это особенно полезно, если вы находитесь в паршивом интернет-соединении: он показывает мгновенную обратную связь, если ваши нажатия клавиш не доходят до сервера и постоянно пытается восстановить соединение.

Установка и настройка просты: теперь она включена во все текущие дистрибутивы Linux (плюс несколько не Linux) и координирует инициализацию и аутентификацию сеанса через предыдущее соединение ssh. Поэтому, если вы можете подключиться через ssh user@server вы, скорее всего, сможете подключиться к mosh, просто позвонив на mosh user@server , если пакеты mosh установлены на обоих концах.

Основной причиной сбоев подключения является то, что вам нужно добраться до сервера на UDP-порту (диапазон по умолчанию: 60000-61000) для работы mosh. Поэтому, если сервер находится за брандмауэром, вам в основном не повезло, если он не может пробить дыры в нем самостоятельно ( последствия для безопасности ).

Если вы хотите иметь более длительный период соединения, в клиенте добавьте:

 echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config 

ServerAliveCountMax по умолчанию это значение равно 3. Поэтому, когда ServerAliveInterval отправил 3 небольших пакета информации на ваш сервер, он автоматически выйдет из системы. Установка его на 1200 означает, что этот процесс должен произойти по крайней мере 1200 раз. Короче говоря, вы должны быть подключены не менее 30 * 1200 секунд (10 часов).

Обычно это означает, что соединение с вашей сетью (TCP) было сброшено. Например, ваш интернет-провайдер подключил вас или что-то вроде этого.

Другая причина для сообщения «Broken Pipe» заключается в том, что другой компьютер пытается использовать тот же IP-адрес, что и ваш хост.

Простой способ проверить, использует ли кто-то другой этот IP-адрес:

  1. Выключите хост
  2. ping на том же IP-адресе, чтобы узнать, использует ли другой компьютер этот IP-адрес

Чтобы узнать, какие компьютеры находятся в вашей сети, вы можете использовать этот вопрос для Unix & Linux: как найти, какие другие компьютеры подключены к локальной сети .

У меня была та же проблема, но это не так, как ожидалось. Если вы обнаружите, что в той же сети другой сервер пытается использовать тот же IP-адрес, вы столкнетесь с той же проблемой. Чтобы решить эту проблему, вам нужно проверить, есть ли другие серверы, которые используют один и тот же IP-адрес. Это можно сделать с помощью команды arp .

Я использую Debian, поэтому здесь приведен пример команд, которые я использую, чтобы определить, действительно ли на другом сервере используется один и тот же IP-адрес

 apt-get install arp-scan arp-scan -I eth0 -l | grep 192.168.1.42 192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown) 192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2) 

Вы заметите два набора MAC-адресов с использованием одного и того же IP-адреса. Избегайте конфликтов, устанавливая один на другой IP-адрес.