Іноді мій сеанс 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 (плюс кілька нелінукс-дистрибутивів) і координує ініціалізацію сеансу та автентифікацію сеансу за допомогою попереднього з'єднання ssh. Отже, якщо ви зможете підключитися через ssh user@server
вас, велика ймовірність, що ви зможете з'єднатися з mosh просто зателефонувавши mosh user@server
, якщо пакети mosh встановлені на обох кінцях.
Основна причина збоїв у з’єднанні полягає в тому, що вам доведеться дістатися до сервера через порт UDP (діапазон за замовчуванням: 60000-61000), щоб msh працював. Тож, якщо сервер знаходиться за брандмауером, то ви здебільшого не пощастили, якщо не можете самостійно пробити дірки ( наслідки безпеки ).
Якщо ви хочете мати більш тривалий період з'єднання, в клієнті додайте:
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-адресу.
Ще одна причина для "Зламаного повідомлення труби" полягає в тому, що інша машина намагається використовувати той же IP, що і ваш хост.
Простий спосіб перевірити, чи хтось інший використовує цей IP:
Щоб дізнатися, які машини є у вашій мережі, ви можете скористатись цією назвою питання Unix & Linux: Як знайти, які інші машини підключені до локальної мережі .