Вопрос или проблема
Время от времени я копирую данные с моего ноутбука Apple Air на сервер с Linux.
Если сумма размеров скопированных файлов превышает несколько гигабайт (неясно, каков предел), я получаю ошибку (большинство файлов от нескольких МБ до 300 МБ каждый):
“client_loop: send disconnect: Broken pipe
scp: Connection closed”
После этого все безопасные соединения обрываются.
Я пытаюсь переподключиться с помощью scp и/или ssh, но всегда получаю ошибку “client_loop: send disconnect: Broken pipe”.
Во всех случаях у меня есть приглашение, я ввожу свой пароль и двухфакторную аутентификацию.
Обычно, через несколько минут или много минут ситуация разрешается сама собой.
Использование множества флагов ‘-v’ в ssh и scp не дает мне дополнительной информации.
uname -a:
Linux 3.10.0-1160.88.1.el7.x86_64 #1 SMP Вт Мар 7 15:41:52 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
ssh -V:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Янв 2017
на другом хосте
Linux 5.15.0-122-generic #132-Ubuntu SMP Чт Авг 29 13:45:52 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
OpenSSH_8.9p1 Ubuntu-3ubuntu0.10, OpenSSL 3.0.2 15 Мар 2022
У меня нет прав SysAdmin на всех хостах.
На моем ноутбуке стоит Sonoma 14.6.1, но ошибка, о которой я сообщаю, также наблюдалась на предыдущих версиях MacOS.
Дайте знать, если у вас есть какие-либо идеи.
Спасибо
Ответ или решение
Кажется, вы сталкиваетесь с проблемой, связанной с передачей больших объемов данных через ssh
и scp
, когда соединение разрывается с ошибкой "client_loop: send disconnect: Broken pipe". Давайте рассмотрим возможные причины и решения этой проблемы подробнее.
Предпосылки проблемы
При копировании данных между устройствами, как в вашем случае — с ноутбука Mac на машину под управлением Linux, часто возникают проблемы, связанные с сетевыми подключениями. Вы упомянули, что ошибка появляется, когда общий объем копируемых файлов превышает определенный лимит. Это может быть связано с несколькими аспекты:
- Время соединения: Долгая передача больших объектов может привести к тому, что сервер или клиент разрывают соединение из-за ограничения времени работы сессии.
- Настройки MTU и MSS: Проблемы с фрагментацией пакетов могут повлиять на стабильность соединения, особенно если обе стороны находятся в разных сетях.
- Проблемы с маршрутизацией: Задержки или потери пакетов могут вызвать отключение сессии, особенно при передаче больших данных.
- Настройки сервера: Некоторые системные настройки на сервере, такие как
ClientAliveInterval
иClientAliveCountMax
, могут завершить сессию, если клиент не отвечает в течение определенного времени.
Объяснение проблемы
Ошибка "Broken pipe" чаще всего возникает, когда одна сторона соединения перестает отвечать. В случае ssh
и scp
это может произойти по следующим причинам:
- Проблемы с сетевым соединением: Если между вашим ноутбуком и сервером есть временные разрывы в сети, соединение может разорваться.
- Тайм-ауты на стороне сервера: Если ваш компьютер не отправляет данные в течение заданного периода времени, сервер может завершить сессию.
- Система управления ресурсами на сервере: В некоторых случаях ограничение по ресурсам (например, память, процессор) может привести к нарушению соединения.
Решения
Вот несколько шагов, которые могут помочь решить вашу проблему:
-
Настройки SSH: Добавьте или измените настройки в файле
~/.ssh/config
вашего клиента:Host * ServerAliveInterval 60 ServerAliveCountMax 30
Эти параметры обеспечивают отправку сигнала серверу на каждые 60 секунд, что помогает поддерживать активное соединение.
-
Увеличение ограничения времени сессии на сервере: Возможно, у администратора сервера есть возможность увеличить значения
ClientAliveInterval
иClientAliveCountMax
. Это может помочь избежать разрыва соединения. -
Фрагментация данных: Если возможно, попробуйте разбить данные на более мелкие части, чтобы каждая передача занимала меньше времени. Это можно сделать с помощью утилит для архивирования, таких как
tar
. -
Использование
rsync
: Этот инструмент более устойчив к отключениям и может восстановить передачу данных, если соединение было потеряно:rsync -avz --progress source_dir user@remote_host:/path/to/destination
-
Мониторинг сети: Убедитесь, что в вашей сети нет потерь пакетов или высоких задержек. Вы можете использовать утилиты, как
ping
илиmtr
, чтобы диагностировать сетевые проблемы.
Заключение
Ошибки связи при передаче данных по SSH могут быть вызваны несколькими факторами, включая настройки тайм-аутов на сервере, проблемы с сетевой стабильностью и ограничения системных ресурсов. Попробуйте предложенные методы, чтобы улучшить стабильность ваших соединений. Если проблема сохраняется, обратитесь к вашему системному администратору для получения дополнительной поддержки, особенно в отношении настроек сервера.
Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь обращаться. Успехов в ваших операциях!