So verwenden Sie SSH-Pipes unter Linux
UNIX-Pipes sind ein monumentaler Schritt in der Entwicklung von UNIX und UNIX-ähnlichen Betriebssystemen. Es ermöglichte Benutzern die Ausführung komplexer Rechenaufgaben durch die Verknüpfung der Eingabe und Ausgabe grundlegender Programme. Dieser Artikel erweitert dies, indem er Ihnen zeigt, wie Sie eine UNIX-Pipe unter Linux über ein Netzwerk mit dem SSH-Protokoll verwenden.
Die Unix-Pipeline verstehen
Pipes unter Unix (und damit auch Linux) werden verwendet, um Programme miteinander zu verketten und dafür zu sorgen, dass sie zusammenarbeiten. Mit cat
können Sie beispielsweise den Inhalt einer Datei anzeigen, aber wenn Sie eine Pipe (|
) verwenden, können Sie < verketten einen i=3>-Befehl zum -Befehl hinzufügen, um das Durchlesen der Datei zu erleichtern.cat
more
Die Grundidee hier ist folgende: program1 fileX | program2
. Es ist jedoch nicht nur auf eine Datei und zwei Programme beschränkt. Die Verrohrung kann mit so vielen Modifikatoren, wie Sie sich vorstellen können, so weit fortgeschritten sein, wie Sie es benötigen.
Hier sind einige Möglichkeiten, Pipe (|
) in SSH-Situationen sinnvoll zu nutzen.
Komprimierte Verzeichnisse automatisch übertragen
Eine der häufigsten Arten der Verwendung von UNIX-Pipes besteht darin, die Ausgabe eines Programms in einer Datei irgendwo im lokalen System zu speichern. Wenn Sie beispielsweise echo "Hello, MakeTechEasier!"| tee Hello
ausführen, wird das Programm echo
ausgeführt und gleichzeitig die Zeichenfolge „Hello, MakeTechEasier!“ gespeichert. in der Datei „Hallo.“
Dennoch können Sie diese Idee nutzen, um Verzeichnisse zwischen zwei Linux-Hosts zu übertragen. Lesen Sie dazu den Ordner, den Sie senden möchten, mit tar
und leiten Sie ihn dann an Ihren SSH-Daemon weiter:
Dieser Befehl bündelt Ihren Ordner in einem TAR-Archiv und sendet es an die Standardausgabe des Befehls. Die UNIX-Pipe liest diese Daten dann und sendet sie über SSH an Ihren Remote-Linux-Host.
Sie können diesen Befehl auch umkehren, um Ihre Dateien von Remote-Hosts abzurufen:
Dateien von Remote-Hosts übertragen und abrufen
Sie können auch Pipes und SSH verwenden, um einzelne Dateien über das Netzwerk zu senden. Dies funktioniert durch die Verwendung von cat
als Möglichkeit, den Inhalt einer Datei zu laden und über SSH zu senden:
Der Remote-Host empfängt den Ausgabestream vom lokalen Cat-Prozess und rekonstruiert die Datei unverändert.
Um eine Datei von einem Remote-Host abzurufen, müssen Sie die Reihenfolge des Befehls umkehren und den Pfad für Ihre Remote-Datei angeben:
Sichern und Wiederherstellen von Laufwerken aus der Ferne
Ähnlich wie beim Senden von Dateien und Verzeichnissen ist es unter Linux möglich, ganze Laufwerke remote mit einer UNIX-Pipe und SSH zu sichern. Dies kann nützlich sein, wenn Sie schnelle Offsite-Backups erstellen möchten und im Moment kein physisches Ersatzlaufwerk haben.
Um ein gesamtes Laufwerk zu sichern, führen Sie dd
aus, wobei die Variable „if=“ auf das Laufwerk eingestellt ist, das Sie sichern möchten, und leiten Sie es dann an Ihren SSH-Daemon weiter:
Wenn Sie diesen Befehl umkehren, können Sie auch ein Festplatten-Image von einem Remote-Computer auf einer physischen Festplatte wiederherstellen:
Darüber hinaus funktioniert diese SSH-Pipe-Syntax auch mit diskreten Festplattenpartitionen. Wenn Ihr System beispielsweise über eine /home-Partition in „/dev/sda4“ verfügt, können Sie den folgenden Befehl ausführen, um ein Backup davon zu erstellen:
Umleiten der Audioeingabe an einen Remote-Computer
Einer der Vorteile von SSH-Pipes besteht darin, dass Sie mit Remote-Computern interagieren können, als wären diese eine lokale Ressource. Dazu gehört die Möglichkeit, auf Gerätedateien wie den Audioeingang eines Systems zuzugreifen.
Führen Sie dazu eine Remote-ALSA-Subshell mit SSH aus und senden Sie deren Ausgabe an Ihren lokalen ALSA-Daemon:
Dadurch wird das Standard-Audioeingabegerät auf dem Remote-Computer abgehört und das, was es hört, auf Ihrem System abgespielt. Wenn Sie die Befehle jedoch umdrehen, wird der Audioeingang Ihres lokalen Computers an den Audioausgang Ihres Remote-Hosts gesendet:
Die ALSA SSH-Pipe funktioniert auch, wenn Sie sie mit anderen Audiowiedergabetools kombinieren. Sie können beispielsweise die Arecord-Ausgabe von einer SSH-Pipe an ffmpeg senden:
Live-Video von einer Remote-Webcam streamen
Eine weitere großartige Verwendung von SSH-Pipes unter Linux ist das Streamen von Live-Video-Webcam-Feeds. Genau wie bei Audio können Sie hierdurch das Gerät eines Remote-Hosts nutzen und dessen Ausgabe auf Ihrem lokalen Computer rendern.
Um von der Webcam eines Remote-Hosts zu streamen, führen Sie SSH mit einer ffmpeg-Subshell aus und leiten Sie es dann an einen Videowiedergabe-Client auf Ihrem lokalen Computer weiter:
Dieser Befehl streamt die Rohvideoausgabe von der ersten Webcam auf Ihrem Remote-Computer.
Es ist auch möglich, das Filmmaterial Ihrer Remote-Webcam in einer separaten Datei aufzuzeichnen. Sie können dies tun, indem Sie die Daten von der SSH-Pipe an tee senden, bevor Sie sie an Ihren Videoplayer umleiten:
Drucken von Text auf einer Remote-Konsole
Neben Audio und Video können Sie auch SSH-Pipes verwenden, um Rohtext auf dem TTY eines Remote-Computers zu senden. Dies ist hilfreich, wenn Sie Statusmeldungen an ein System ohne GUI senden möchten.
Erstellen Sie zunächst eine FIFO-Pipe auf Ihrem lokalen Computer:
Führen Sie einen Überwachungsbefehl tail
mit Ihrem FIFO aus und senden Sie seine Ausgabe an einen SSH-Daemon:
Testen Sie, ob Ihre neue FIFO-Pipe über das Netzwerk funktioniert, indem Sie Textdaten mit dem Echo-Befehl senden:
Remote-Daten an eine lokale Zwischenablage weiterleiten
Der größte Nachteil einer Systemzwischenablage besteht darin, dass sie nur mit dem lokalen Computer funktioniert. Dies ist ein Problem, wenn Sie mit mehreren Computern arbeiten und Daten übertragen möchten, ohne temporäre Dateien zu erstellen.
Eine Möglichkeit, dies zu beheben, besteht darin, eine SSH-Pipe zu erstellen, die eine Remote-Datei lesen und direkt an die Zwischenablage Ihres lokalen Systems senden kann:
Dieser Befehl stellt eine Verbindung zu Ihrem Remote-Computer her, führt das Dienstprogramm cat aus und beginnt dann mit dem Lesen der Datei „ramces.txt“. Sobald dies erledigt ist, werden die Remote-Daten an Ihren lokalen Computer zurückgesendet und in die Zwischenablage Ihres Systems umgeleitet.
Sie können die aktuelle Zwischenablage Ihres Systems auch als Datei auf Ihren Remote-Computer übertragen, indem Sie den folgenden Befehl verwenden:
Das Erlernen des Sendens von Daten über ein Netzwerk mithilfe von UNIX-Pipes und SSH ist nur der erste Schritt zum Verständnis der Funktionsweise von Computernetzwerken. Erfahren Sie mehr über Ihr Netzwerk, indem Sie mit Traceroute verfolgen, wohin Ihre Pakete gehen.
Bildnachweis: Mikhail Fesenko über Unsplash. Alle Änderungen und Screenshots von Ramces Red.
Schreibe einen Kommentar