ssh/scp перестают работать, когда скопировано большое количество данных.

Вопрос или проблема

Время от времени я копирую данные с моего ноутбука 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, часто возникают проблемы, связанные с сетевыми подключениями. Вы упомянули, что ошибка появляется, когда общий объем копируемых файлов превышает определенный лимит. Это может быть связано с несколькими аспекты:

  1. Время соединения: Долгая передача больших объектов может привести к тому, что сервер или клиент разрывают соединение из-за ограничения времени работы сессии.
  2. Настройки MTU и MSS: Проблемы с фрагментацией пакетов могут повлиять на стабильность соединения, особенно если обе стороны находятся в разных сетях.
  3. Проблемы с маршрутизацией: Задержки или потери пакетов могут вызвать отключение сессии, особенно при передаче больших данных.
  4. Настройки сервера: Некоторые системные настройки на сервере, такие как ClientAliveInterval и ClientAliveCountMax, могут завершить сессию, если клиент не отвечает в течение определенного времени.

Объяснение проблемы

Ошибка "Broken pipe" чаще всего возникает, когда одна сторона соединения перестает отвечать. В случае ssh и scp это может произойти по следующим причинам:

  • Проблемы с сетевым соединением: Если между вашим ноутбуком и сервером есть временные разрывы в сети, соединение может разорваться.
  • Тайм-ауты на стороне сервера: Если ваш компьютер не отправляет данные в течение заданного периода времени, сервер может завершить сессию.
  • Система управления ресурсами на сервере: В некоторых случаях ограничение по ресурсам (например, память, процессор) может привести к нарушению соединения.

Решения

Вот несколько шагов, которые могут помочь решить вашу проблему:

  1. Настройки SSH: Добавьте или измените настройки в файле ~/.ssh/config вашего клиента:

    Host *
       ServerAliveInterval 60
       ServerAliveCountMax 30

    Эти параметры обеспечивают отправку сигнала серверу на каждые 60 секунд, что помогает поддерживать активное соединение.

  2. Увеличение ограничения времени сессии на сервере: Возможно, у администратора сервера есть возможность увеличить значения ClientAliveInterval и ClientAliveCountMax. Это может помочь избежать разрыва соединения.

  3. Фрагментация данных: Если возможно, попробуйте разбить данные на более мелкие части, чтобы каждая передача занимала меньше времени. Это можно сделать с помощью утилит для архивирования, таких как tar.

  4. Использование rsync: Этот инструмент более устойчив к отключениям и может восстановить передачу данных, если соединение было потеряно:

    rsync -avz --progress source_dir user@remote_host:/path/to/destination
  5. Мониторинг сети: Убедитесь, что в вашей сети нет потерь пакетов или высоких задержек. Вы можете использовать утилиты, как ping или mtr, чтобы диагностировать сетевые проблемы.

Заключение

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

Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь обращаться. Успехов в ваших операциях!

Оцените материал
Добавить комментарий

Капча загружается...