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‑прав.

Передача удалённых данных в локальный буфер обмена
На графической локальной машине (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
Шаги:
- Проверить, что раздел не смонтирован или подготовить сервер в одно‑пользовательском режиме.
- На локальном хосте выполнить:
sudo dd if=/dev/sda4 bs=4M | pv | gzip -c | ssh -C ramces@remote.host "cat > /backups/sda4.img.gz" - На удалённом хосте проверить размер и контрольную сумму:
ssh ramces@remote.host "sha256sum /backups/sda4.img.gz" - Хранить метаданные: время, команда, контрольная сумма и описание диска.
Глоссарий (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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента