packet_write_wait Сломанная труба, даже не работающая?

26

Эта кровавая ошибка заставляет мою головную боль усиливаться с каждым днем. Я никогда не встречал такой ситуации, как в этот раз.

Что ж, после того, как я успешно прошел аутентификацию в SSH, выполняя несколько вещей, мое SSH-соединение внезапно обрывается !!?

Вот мое сообщение об ошибке: packet_write_wait: Connection to XXX.XX.XX.XXX: Broken pipe

Я хотел, чтобы мое сообщение об ошибке выглядело так: Write Failed: broken pipeмного, поверь мне!

Я пробовал тонны разрешения в Интернете, как добавлено ServerAliveInterval, ServerAliveCountMax, ClientAlive ....

Кто-то сказал: «Преврати свой TCPKeepAlive в нет», добавил ServerAlive, бла-бла-идиот. Я сделал это тоже, но все еще та же ошибка.

Мне не повезло до этого момента.

Любая помощь будет оценена.

Тоан Нгуен
источник
2
Если вы находитесь в корпоративной среде, узнайте у администраторов вашего брандмауэра и посмотрите, обновляли ли они правила и / или перезапускали ли брандмауэр после каких-то изменений, когда это происходит. Если это происходит с вашим личным сервером, вам нужно предоставить больше информации о том, что вы делали на стороне сервера sshd, когда это произошло. Broken pipeобычно означает, что произошел разрыв сети по какой-то причине.
MelBurslan
Я только что переехал, и это постоянно происходит с моей новой связью. Cox Cable - мой провайдер, и у меня есть кабельный модем Netgear C6300BD, работающий с настройками по умолчанию после установки. Это бывало в моем старом месте, и я никогда не мог решить это. Это продолжалось месяцами и в итоге перестало происходить. Я забыл, как это было несчастно и неразрешимо до сегодняшнего дня.
Т. Брайан Джонс
Я чувствую твою боль. Я пришел сюда в крайнем случае, прежде чем собирать все свое оборудование на мелкие кусочки. Разве это не должен быть довольно простой протокол?
DerpyNerd
У меня была та же ошибка на Виртуализированном Linux, проблема решена изменением адаптера Ethernet на мостовой
Абель Барриос

Ответы:

8

Уважаемые читатели 2018 года и позже,

Позвольте мне показать вам комментарий от MelBurslan,

Если вы находитесь в корпоративной среде, узнайте у администраторов брандмауэра и посмотрите, обновляли ли они правила и / или перезапускали ли брандмауэр после каких-либо изменений, когда это происходит. Если это происходит с вашим личным сервером, вам нужно предоставить больше информации о том, что вы делали на стороне сервера sshd, когда это произошло. Сломанный канал обычно означает, что по какой-то причине произошло отключение от сети.

Так что в основном, если вы пытаетесь использовать ssh username@0.0.0.0через VPN (корпоративная среда). Тогда эта ошибка должна быть с вами снова и снова.

Единственное решение, которое я нашел до сих пор, это mobile-shell . Спасибо, кто создал это.

Вам нужно будет установить mosh-serverв своей цели (сервер, на котором вы хотите ssh'ed) и mosh-clientна хост-машине.

Я думаю, что он автоматически переподключится, когда ваши пакеты будут потеряны.

Счастливого ssh'ing!

Тоан Нгуен
источник
3

Я обнаружил, что это была проблема с опцией IPQoS при настройке гостевой системы VMware. На ВМ я установил значение ~ / .ssh / config для IPQoS из значения по умолчанию «IPQoS af21 cs1», представляющего собой данные с низкой задержкой для интерактивного первого и меньшие усилия для неинтерактивного для второго. Установка нового значения для af21 была моим решением:

Host *
     IPQoS throughput

Работал для меня, иначе да, MoSH также работает, но mosh не обрабатывает мою настройку Proxy удобным способом, поэтому я придерживаюсь команд ProxyJump в

rupert160
источник
Забавно, это работает в командной строке (как вы объясните в своем посте по Ubuntu), но не в конфигурационном файле 8-D
aurelien
1

Во-первых, убедитесь, что ваша проблема не связана с этим .

Если нет и проблема все еще присутствует, читайте дальше.

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

Как указано, игра с параметрами SSH KeepAlive или параметрами TCP ядра (вкл / выкл TCPKeepAlive) не решает проблему.

Поиграв с usb в драйверы Ethernet и дамп TCP, я понял, что проблема связана с ядром 4.8. Я переключил источник (отправляющая сторона) на 4.4 LTS, и проблема исчезла (rsync, scp снова работали хорошо). Сторона назначения может остаться на 4.8, если хотите, в моем случае это работало (проверено).

С технической стороны, мы можем немного сузить проблему благодаря свалке проволоки ниже, которую я сделал. Мы можем видеть, что канал TCP протокола SSHv2 сбрасывается (флаг RST TCP установлен в 1), что приводит к прерыванию соединения. Я еще не знаю причину RST. Для этого мне нужно сделать несколько пополам с 4.8.1 до 4.8.11.введите описание изображения здесь

Я не говорю, что ваша проблема связана именно с ядром 4.8, но это не так. дата, когда вы опубликовали свой вопрос / сообщение, вы, возможно, использовали версию ядра, которая была действительно глючной.

Ответили изначально на StackOverflow .

Wget
источник
Ядро не проблема, потому что я все время использовал 4.4 LTS. На настоящую проблему здесь ответил @MelBursan в комментарии к вопросу. Мое подключение к интернету через VPN, вот почему. Решение: mosh.org
Тоан Нгуен
@ToanNguyen Хорошо. Таким образом, не могли бы вы оставить свой комментарий в качестве ответа на ваш вопрос и отметить его как исправленный? :-) Если вы нашли технические причины, по которым вам нужен mosh, пожалуйста, добавьте их тоже :-). Со своей стороны, у меня также есть VPN-соединения, и они работали без сбоев.
wget
Я вернусь к этому. Проблема была не в глючном ядре, а в глючном драйвере, особенно в части, посвященной разгрузке контрольной суммы оборудования. Смотрите эту тему для получения дополнительной информации .
Wget
Решает ли это вашу проблему?
Тоан Нгуен
@ ToanNguyen На самом деле в прошлый раз, когда у меня была эта проблема, я просто понизил ядро, и оно снова заработало. Теперь я просто отключил разгрузку контрольной суммы hw, ничего не понижая, и это решило проблему, да.
wget
1

ssh -o IPQoS=throughput user@{ip}

Вики Пенкова
источник
Нет никаких признаков того, что пользователь использует macOS или пытается войти в систему как root.
Кусалананда
Вы правы! Тем не менее, я протестировал команду с пользователем, отличным от «root» и в Windows. До сих пор работает!
Вики Пенкова
0

Откройте файл ssh.config на целевом сервере с помощью следующей команды:

sudo nano /etc/ssh/ssh.config

Добавьте строки ниже в конце этого файла

ClientAliveInterval 300

ClientAliveCountMax 2

нажмите Ctrl + o и введите.

перезагрузка sudo

Это действительно сработало для меня. Я был в такой же ситуации. Пробовал то и это, но просто следуйте этим шагам. Только это. Я надеюсь, что это сработает и для вас.

DonFeraRRi
источник