Що означає повідомлення "Зламана труба" під час сеансу SSH?


103

Іноді мій сеанс SSH відключається з Write failed: Broken pipeповідомленням. Що це означає? І як я можу тримати свою сесію відкритою?

Я знаю про screen, але це не відповідь, яку я шукаю. Я думаю, що це sshdваріант налаштування.

Відповіді:


89

Можливо, ваш сервер занадто довго закриває з'єднання, які простоюють. Ви можете оновити або свого клієнта ( 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 

NB , що іноді "* AliveInterval" не вистачає stackoverflow.com/questions/10665267 / ...
rogerdpack

1
На ~/.ssh/configмоєму Mac немає, чи потрібно його створювати там чи це десь ще?
AGamePlayer

5
@AwQiruiGuo Так, спочатку слід створити каталог ( ~/.ssh). Отжеmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Герт

6

Альтернативним рішенням буде використання mosh- мобільна оболонка . На відміну від ssh, він підключається через UDP та підтримує роумінг. Ви можете розпочати сеанс вдома, призупинити свій ноутбук, взяти його на роботу / друзів / де б не було Інтернету, відмовити ноутбук і продовжувати працювати так, ніби нічого не сталося. Це особливо корисно, якщо ви перебуваєте в невдалому підключенні до Інтернету: він показує миттєвий зворотній зв'язок, якщо ваші натискання клавіш не доходять до сервера і постійно намагаються відновити з'єднання.

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

Основна причина збоїв у з’єднанні полягає в тому, що вам доведеться дістатися до сервера через порт UDP (діапазон за замовчуванням: 60000-61000), щоб msh працював. Тож, якщо сервер знаходиться за брандмауером, то ви здебільшого не пощастили, якщо не можете самостійно пробити дірки ( наслідки безпеки ).


3

Якщо ви хочете мати більш тривалий період з'єднання, в клієнті додайте:

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 годин).


5
Навіщо використовувати sudo для файлу, який або належить поточному користувачеві, або ще не існує?
Губерт Ґшесковяк

2

Зазвичай це означає, що ваше мережеве з'єднання (TCP) було скинуто. Наприклад, ваш Інтернет-провайдер підключив вас або щось подібне.


1

У мене була така ж проблема, але це не так, як очікувалося. Якщо ви виявите, що в тій же мережі інший сервер намагається отримати ту саму 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-адресу.


0

Ще одна причина для "Зламаного повідомлення труби" полягає в тому, що інша машина намагається використовувати той же IP, що і ваш хост.

Простий спосіб перевірити, чи хтось інший використовує цей IP:

  1. Вимкніть хост
  2. ping той же IP, щоб побачити, чи інша машина використовує цей IP

Щоб дізнатися, які машини є у вашій мережі, ви можете скористатись цією назвою питання Unix & Linux: Як знайти, які інші машини підключені до локальної мережі .

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