Как использовать SSH Pipe в Linux
Канал UNIX — это важный шаг вперед в развитии UNIX и UNIX-подобных операционных систем. Он позволяет пользователям выполнять сложные вычислительные задачи, связывая ввод и вывод базовых программ. Эта статья расширяет эту тему, показывая, как использовать каналы UNIX в Linux по сети с использованием протокола SSH.
Узнайте больше о Unix Pipeline
Каналы в Unix (и, как следствие, в Linux) используются для соединения программ и обеспечения их совместной работы. Например, при использовании cat вы можете отобразить содержимое файла, но если вы используете канал (|), вы можете связать команду cat с командой more, чтобы облегчить чтение файла.
кот файл1 | более
Основная идея здесь такова: программа1 fileX | программа2. Однако дело не ограничивается одним файлом и двумя программами. Трубопроводы могут стать более совершенными в соответствии с вашими потребностями, используя столько модификаторов, сколько вы сможете придумать.
Вот несколько способов эффективного использования канала (|) в ситуациях SSH.
Автоматически конвертировать сжатые папки
Один из наиболее распространенных способов использования канала UNIX — сохранение вывода программы в файл где-нибудь в локальной системе. Например, запустите echo «Hello, MakeTechEasier!» | tee Hello запустит программу echo, сохраняя при этом строку «Hello, MakeTechEasier!». внутри файла «Привет».
Это означает, что вы можете использовать эту идею для переноса папок между двумя серверами Linux. Для этого прочитайте каталог, который вы хотите отправить, с помощью tar, затем передайте его демону SSH:
tar czf – “~/Документы/моя папка” | ssh ramces@remote.host “tar xzf – -C ~/Documents/”
Эта команда упакует ваш каталог в tar-архив и отправит его на стандартный вывод команды. Затем канал UNIX прочитает эти данные и отправит их на удаленный сервер Linux с помощью SSH.
Вы также можете отменить эту команду, чтобы удалить файлы с удаленного сервера:
ssh ramces@remote.host “tar czf – ~/Documents/myfolder” | tar xzf – -C “~/Документы/”
Отправка и получение файлов с удаленных серверов
Вы также можете использовать каналы и SSH для отправки отдельных файлов по сети. Это работает, используя cat как способ загрузки содержимого файла и отправки его через SSH:
кот мой.удаленный.файл”
Удаленный сервер получит выходной поток от локального процесса cat и перестроит файл, как и раньше.
Чтобы получить файлы с удаленного сервера, вам необходимо изменить порядок команд на обратный и указать путь к удаленному файлу:
ssh ramces@remote.host “cat my.local.file
Резервное копирование и восстановление удаленных дисков
Подобно отправке файлов и папок, в Linux можно удаленно создавать резервные копии целых дисков, используя каналы UNIX и SSH. Это может быть полезно, если вы хотите создать быструю резервную копию вне офиса, но у вас в настоящее время нет запасного физического диска.
Чтобы создать резервную копию всего диска, запустите dd с переменной ‘if=”, установленной для диска, который вы хотите создать резервную копию, а затем передайте ее вашему демону SSH:
sudo dd if=/dev/sda | ssh ramces@remote.host “dd of=sda.img”
Отмена этой команды также позволяет восстановить образ диска с удаленного компьютера на физический диск:
ssh ramces@remote.host “dd if=sda.img” | судо дд =/dev/sda
Более того, этот синтаксис канала SSH также будет работать с отдельными разделами диска. Например, если в вашей системе есть раздел /home в «/dev/sda4», вы можете запустить следующую команду, чтобы создать резервную копию этого раздела:
sudo dd if=/dev/sda4 | ssh ramces@remote.host “dd of=home.img”
Перенаправить аудиовход на удаленный компьютер
Одним из преимуществ каналов SSH является то, что они позволяют взаимодействовать с удаленными компьютерами, как если бы они были локальными ресурсами. Это включает в себя возможность использовать файлы устройств, например аудиовход системы.
Для этого запустите удаленную подоболочку ALSA с помощью SSH и отправьте ее вывод локальному демону ALSA:
ssh ramces@remote.host “arecord -f cd” | игра
Это будет прослушивать устройство ввода звука по умолчанию на удаленном компьютере и воспроизводить то, что оно слышит в вашей системе. Это означает, что переключение команд отправляет аудиовход локального компьютера на аудиовыход удаленного сервера:
арекорд -f компакт-диск | ssh ramces@remote.host “aplay”
Канал ALSA SSH также будет работать, если вы объедините его с другими инструментами потоковой передачи звука. Например, вы можете отправить вывод arecord из канала SSH в ffmpeg:
ssh ramces@remote.host “arecord -f cd” | ffplay -nodisp –
Потоковое видео с удаленной веб-камеры
Еще одно замечательное использование каналов SSH в Linux — потоковая передача видео с веб-камеры в реальном времени. Как и в случае со звуком, это позволяет вам использовать преимущества устройства удаленного сервера и отображать выходные данные этого устройства на вашем локальном компьютере.
Для потоковой передачи с веб-камеры удаленного сервера запустите SSH с подоболочкой ffmpeg, а затем передайте его клиенту потокового видео на локальном компьютере:
ssh ramces@remote.host “ffmpeg -r 14 -s 640×480 -f video4linux2 -i /dev/video0 -f matroska -” | mpv –demuxer=mkv /dev/stdin
Эта команда будет транслировать необработанное видео с первой веб-камеры на вашем удаленном компьютере.
Вы также можете записать кадры с удаленной веб-камеры в отдельный файл. Вы можете сделать это, отправив данные из канала SSH на tee перед перенаправлением их на видеоплеер:
ssh ramces@remote.host “ffmpeg -r 14 -s 640×480 -f video4linux2 -i /dev/video0 -f matroska -” | тройник my_recording.mkv | mpv –demuxer=mkv /dev/stdin
Распечатать текст на удаленной консоли
Помимо аудио и видео, вы также можете использовать канал SSH для отправки необработанного текста на телетайп удаленного компьютера. Это полезно, если вы хотите отправлять сообщения о состоянии в систему, у которой нет графического интерфейса.
Для начала создайте канал FIFO на своем локальном компьютере:
mkfifo мой-фифо
Запустите команду Tail Listen, используя FIFO, и отправьте ее вывод демону SSH:
хвост -f мой-фифо | ssh root@remote.host “cat > /dev/tty0”
Проверьте, работает ли ваш новый канал FIFO по сети, отправив текстовые данные с помощью команды echo:
echo “Привет, MakeTechEasier!” >моё-фифо
Примечание. Отправка текста на телетайп устройства будет работать только в том случае, если вы вошли в систему с учетной записью root этого устройства.
Перенос удаленных данных в локальный буфер обмена
Самый большой недостаток системного буфера обмена заключается в том, что он работает только с локальным компьютером. Это проблема, если вы работаете с несколькими компьютерами и хотите передавать данные без создания временных файлов.
Один из способов исправить это — создать канал SSH, который может читать и отправлять удаленные файлы непосредственно в буфер обмена вашей локальной системы:
ssh ramces@remote.host “кот
Эта команда подключится к вашему удаленному компьютеру, запустит утилиту cat и начнет читать файл «ramces.txt». После завершения он отправляет удаленные данные обратно на ваш локальный компьютер и перенаправляет их в системный буфер обмена.
Вы также можете отправить текущий буфер обмена системы в виде файла на удаленный компьютер, используя следующую команду:
xclip -sel буфер обмена -o | ssh ramces@remote.host “cat > ~/clip.txt”
Изучение того, как отправлять данные по сети с помощью каналов UNIX и SSH, — это лишь первый шаг к пониманию того, как работают компьютерные сети. Узнайте больше о своей сети, отслеживая, куда идут ваши пакеты, с помощью Traceroute.