Иногда моя сессия SSH отключается с Write failed: Broken pipe
сообщением. Что это значит? И как я могу сохранить свою сессию открытой?
Я знаю о screen
, но это не тот ответ, который я ищу. Я думаю, что это sshd
вариант конфигурации.
Иногда моя сессия 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
~/.ssh/config
моем Mac его нет, нужно ли его создавать там или это где-то еще?
~/.ssh
сначала создать каталог ( ). Итакmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Альтернативным решением будет использование mosh
- мобильная оболочка . В отличие от ssh он подключается через UDP и поддерживает роуминг. Вы можете начать сеанс дома, приостановить работу своего ноутбука, взять его на работу / друзей / где бы у вас ни был Интернет, отключить ноутбук и продолжить работу, как будто ничего не произошло. Это особенно полезно, если у вас плохое интернет-соединение: оно показывает мгновенную обратную связь, если ваши нажатия клавиш не доходят до сервера, и постоянно пытается восстановить соединение.
Установка и настройка просты: теперь она включена во все текущие дистрибутивы Linux (плюс несколько не-Linux) и координирует инициализацию сеанса и аутентификацию через предыдущее ssh-соединение. Так что, если вы можете подключиться через ssh user@server
него, очень вероятно, что вы сможете подключиться к mosh, просто позвонив mosh user@server
, если пакеты mosh установлены на обоих концах.
Основная причина сбоев соединения заключается в том, что для работы mosh необходимо подключиться к серверу через порт UDP (диапазон по умолчанию: 60000-61000). Так что, если сервер находится за брандмауэром, вам в большинстве случаев не повезло, если вы не можете пробить себе дыру в нем ( последствия для безопасности ).
Если вы хотите иметь более длительный период подключения, в клиенте добавьте:
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) соединение было сброшено. Например, ваш интернет-провайдер переподключил вас или что-то в этом роде.
У меня была такая же проблема, но это не так, как ожидалось. Если вы обнаружите, что в той же сети другой сервер пытается получить тот же 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-адрес на другой.
Другая причина появления сообщения «Broken Pipe» заключается в том, что другая машина пытается использовать тот же IP-адрес, что и ваш хост.
Простой способ проверить, использует ли кто-то этот IP:
Чтобы узнать, какие машины находятся в вашей сети, вы можете использовать заголовок вопроса Unix & Linux: Как найти, какие другие машины подключены к локальной сети .