Гид по технологиям

UNIX-пайпы по SSH в Linux: потоковые команды и сценарии

• 7 min read • Linux • Обновлено 30 Nov 2025
UNIX‑пайпы по SSH в Linux: потоковые команды
UNIX‑пайпы по SSH в Linux: потоковые команды

Оглавление

  • Понимание UNIX‑пайплайна
  • Автоматическая отправка сжатых каталогов
  • Отправка и получение отдельных файлов
  • Резервное копирование и восстановление дисков удалённо
  • Перенаправление аудиовхода на удалённую машину
  • Трансляция видео с удалённой веб‑камеры
  • Печать текста на удалённой консоли
  • Передача удалённых данных в локальный буфер обмена
  • Безопасность и советы по надёжной работе
  • Когда это не сработает и альтернативы
  • Чек‑лист для администратора и пользователя
  • Критерии приёмки и тесты
  • Глоссарий
  • Итог

Мужчина работает за компьютером

Важно: все примеры предполагают, что у вас есть доступ по SSH на удалённый хост и необходимые привилегии. Замените ramces@remote.host и пути на свои.

Понимание UNIX‑пайплайна

Принцип пайпа прост: stdout одной программы перенаправляется в stdin другой через символ |. Это поток данных: программы не записывают промежуточных файлов, а читают и пишут потоки.

Простая иллюстрация:

cat file1 | more

Здесь cat выводит содержимое file1 в stdout, а more читает этот поток и постранично отображает его. В сетевом контексте SSH выступает как средство перенаправления этого потока на удалённый хост и обратно.

Краткое определение терминов:

  • stdin — стандартный ввод (входной поток программы).
  • stdout — стандартный вывод (выходной поток программы).
  • SSH — защищённый канал для удалённого выполнения команд.

Автоматическая отправка сжатых каталогов

Задача: заархивировать каталог локально и передать его на удалённый хост без создания файла архива на диске.

Команда отправки каталога на удалённый хост:

tar czf - -C "$HOME/Documents" myfolder | ssh -C ramces@remote.host "tar xzf - -C ~/Documents/"

Пояснения:

  • tar czf - — сжать в gzip и вывести в stdout вместо файла.
  • -C — перейти в указанный каталог перед архивированием или распаковкой.
  • ssh -C включает сжатие трафика на уровне SSH (полезно при медленных каналах).

Чтобы получить каталог с удалённого хоста на локальную машину, поменяйте порядок:

ssh -C ramces@remote.host "tar czf - -C ~/Documents myfolder" | tar xzf - -C "$HOME/Documents/"

Совет: при больших архивах добавьте pv для индикации прогресса (pv может отсутствовать по умолчанию):

tar czf - -C "$HOME/Documents" myfolder | pv | ssh -C ramces@remote.host "tar xzf - -C ~/Documents/"

Отправка и получение отдельных файлов

Простой способ пересылать отдельные файлы — использовать cat для передачи потока байтов:

Отправка локального файла на удалённый:

cat my.local.file | ssh ramces@remote.host "cat > my.remote.file"

Получение с удалённого на локальный:

ssh ramces@remote.host "cat < my.remote.file" | cat > my.local.file

Проверка целостности после передачи:

# На локальной машине
sha256sum my.local.file
# На удалённой
ssh ramces@remote.host "sha256sum my.remote.file"

Если файлы большие, добавьте сжатие на лету:

cat big.bin | gzip -c | ssh ramces@remote.host "gzip -d > big.bin"

Резервное копирование и восстановление дисков удалённо

Можно передавать блочные устройства (например /dev/sda) по сети. Это удобно для офф‑сайтового бэкапа, но требует осторожности.

Копирование диска с локального на удалённый (создание файла образа на удалённом хосте):

sudo dd if=/dev/sda bs=4M | pv | ssh -C ramces@remote.host "dd of=sda.img"

Восстановление образа с удалённого на локальный диск:

ssh -C ramces@remote.host "dd if=sda.img" | pv | sudo dd of=/dev/sda bs=4M

Примечания по безопасности и надёжности:

  • Используйте bs (block size) например 4M для скорости. Тестируйте оптимальный размер для вашей конфигурации.
  • Перед операцией убедитесь, что диск не смонтирован или используйте режим одного пользователя. Иначе данные будут целыми лишь частично.
  • Для контроля целостности можно передать SHA‑хеш или использовать zstd/gzip с контролем.

Резервирование раздела /dev/sda4:

sudo dd if=/dev/sda4 bs=4M | pv | ssh -C ramces@remote.host "dd of=home.img"

Важно: неверные команды dd могут привести к потере данных. Всегда проверяйте пути и имя диска.

Перенаправление аудиовхода на удалённую машину

ALSA позволяет читать запись с микрофона удалённой машины и воспроизводить на локальной, и наоборот.

Воспроизведение удалённого микрофона локально:

ssh ramces@remote.host "arecord -f cd" | aplay

Отправка локального микрофона на удалённый вывод:

arecord -f cd | ssh ramces@remote.host "aplay"

Примечания:

  • -f cd значит 16‑бит, 44100 Гц, стерео — стандартный CD‑формат.
  • На обеих сторонах должны быть установлены и настроены arecord/aplay (ALSA).
  • Для потоковой обработки можно подключить ffmpeg/ffplay для перекодировки и отображения прогресса:
ssh ramces@remote.host "arecord -f cd" | ffplay -nodisp -

Трансляция видео с удалённой веб‑камеры

FFmpeg + SSH позволяют стримить видео с /dev/video0 удалённой машины на локальный плеер.

Стрим на локальный mpv:

ssh ramces@remote.host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mpv --demuxer=mkv /dev/stdin

Запись и просмотр одновременно:

ssh ramces@remote.host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee my_recording.mkv | mpv --demuxer=mkv /dev/stdin

Советы:

  • Подбирайте -r (fps) и -s (разрешение) под пропускную способность сети.
  • Убедитесь, что у пользователя есть доступ к /dev/video0 на удалённом хосте.

Печать текста на удалённой консоли

Иногда нужно отправить короткие сообщения на физическую консоль удалённой машины (/dev/tty0).

Создайте FIFO и отправьте его содержимое через SSH:

mkfifo my-fifo
tail -f my-fifo | ssh root@remote.host "cat > /dev/tty0"
# В другом терминале
echo "Hello, MakeTechEasier!" > my-fifo

Заметка: доступ к /dev/tty0 обычно требует root‑прав.

Терминал с текстом на TTY

Передача удалённых данных в локальный буфер обмена

На графической локальной машине (X11) можно перенаправлять содержимое файла на удалённой машине прямо в локальный буфер обмена с помощью xclip:

ssh ramces@remote.host "cat < ~/ramces.txt" | xclip -sel clipboard

И наоборот, отправить локальный буфер в файл на удалённой машине:

xclip -sel clipboard -o | ssh ramces@remote.host "cat > ~/clip.txt"

На Wayland могут потребоваться другие утилиты (wl‑clipboard) — проверьте совместимость вашей среды.

Буфер обмена локальной машины

Безопасность и советы по надёжной работе

Important: работа с пайпами по сети расширяет поверхность атак — применяйте практики безопасности SSH.

Рекомендации:

  • Используйте аутентификацию по ключу и отключите парольную аутентификацию там, где это возможно.
  • Ограничьте доступ по IP и используйте брандмауэр.
  • Отключите root‑вход по SSH или используйте принудительные команды (forced commands) в authorized_keys для ограничения действий ключа.
  • Включайте сжатие -C и выбирайте безопасные шифры при необходимости через -oCiphers или серверные настройки.
  • Для регулярных синхронизаций рассмотрите rsync (работает поверх SSH) — он экономит трафик и поддерживает дельты.
  • Логируйте операции и проверяйте контрольные суммы после передачи.

Совет по отказоустойчивости:

  • При нестабильной сети используйте tar с опцией –listed-incremental или инструменты типа restic/duplicity для прерывания и возобновления.

Когда это не сработает и альтернативы

Когда не подходит сетевой пайп:

  • Очень большие объёмы данных при низкой полосе: лучше физический перенос или выделенная репликация.
  • Потребность в возобновлении передачи: используйте rsync или протоколы с поддержкой дельт.
  • Требуется контроль версий и шифрование с управлением ключами: рассмотрите специализированные бэкап‑решения (restic, duplicity).

Альтернативы:

  • scp / sftp — простые для единичных файлов.
  • rsync — эффективен для синхронизации и доплат.
  • Samba/NFS — при постоянном сетевом доступе к файловой системе.

Чек‑лист для администратора и пользователя

Администратор:

  • Настроены ключи SSH и отключены пароли, где возможно.
  • Установлены лимиты логов и мониторинг активности SSH.
  • Ограничен доступ к устройствам (/dev/tty0, /dev/video0) и разграничены права.
  • Проведено тестовое восстановление из бэкапа.

Пользователь:

  • Проверил пути и имена файлов перед запуском dd/tar.
  • Выполнил пробную передачу с контрольной суммой на небольшом файле.
  • Использует –dry‑run для rsync при необходимости.

Роль разработчика/оператора:

  • Автоматизация через скрипт с логированием и обработкой ошибок.
  • Настроена ротация логов и уведомления при ошибках передачи.

Критерии приёмки

Для автоматической передачи каталога:

  • Каталог на удалённом хосте существует и имеет одинаковые файлы с локальным. (sha256sum совпадают для ключевых файлов)
  • Разрешения и владельцы файлов сохранены или явно указаны.
  • Время передачи соответствует ожидаемой пропускной способности сети.

Для образа диска:

  • Образ сохранился на удалённом хосте и контрольная сумма совпадает с локальной (sha256sum).
  • При восстановлении загрузочная запись и файлы доступны, система загружается (если применимо).

Тестовые кейсы:

  • Передать небольшой текстовый файл и проверить сумму.
  • Передать бинарный файл (например ISO) и сравнить итоговую сумму.
  • Остановить соединение во время передачи и проверить возможность возобновления (rsync или повторный запуск).

Примеры неправильного использования и как их избежать

Ошибка: запуск dd на работающей корневой файловой системе без режима однопользовательского доступа. Последствие: повреждение файлов. Решение: использовать live‑среду, снимки LVM или инструменты уровня файловой системы.

Ошибка: передача конфиденциальных данных без шифрования (например, по незащищённым каналам). Решение: всегда используйте SSH; при дополнительном требовании — шифруйте содержимое (gpg) до передачи.

Мини‑плейбук: резервное копирование раздела через SSH

Шаги:

  1. Проверить, что раздел не смонтирован или подготовить сервер в одно‑пользовательском режиме.
  2. На локальном хосте выполнить:
    sudo dd if=/dev/sda4 bs=4M | pv | gzip -c | ssh -C ramces@remote.host "cat > /backups/sda4.img.gz"
  3. На удалённом хосте проверить размер и контрольную сумму:
    ssh ramces@remote.host "sha256sum /backups/sda4.img.gz"
  4. Хранить метаданные: время, команда, контрольная сумма и описание диска.

Глоссарий (1‑строчные определения)

  • SSH — протокол защищённого удалённого доступа и передачи команд.
  • stdout — стандартный поток вывода программы.
  • stdin — стандартный поток ввода программы.
  • tar — утилита архивирования/упаковки в Unix.
  • dd — утилита поблочного копирования устройств и файлов.
  • FIFO — именованный канал обмена между процессами (mkfifo).
  • ALSA — подсистема звука в Linux (arecord/aplay).
  • pv — утилита для отображения прогресса потоковых данных.

Итог

UNIX‑пайпы в сочетании с SSH — мощный и гибкий инструмент. Он позволяет передавать файлы, диски, аудио и видео без создания временных файлов. Но вместе с удобством приходят и риски: всегда проверяйте команды, применяйте практики безопасности и тестируйте процессы на небольших объёмах перед запуском в продакшн.

Image credit: Mikhail Fesenko via Unsplash. All alterations and screenshots by Ramces Red.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро