ZMODEM war ursprünglich ein proprietäres Dateitransfer-Protokoll der Firma
Omen Technologies Inc..
Das 1986 von Chuck Forsberg entwickelte Protokoll ist nun weitestgehend freie Software. Die Linux Implementierung lrzsz
basiert auf dem letzten, unter public domain veröffentlichten Release, von rzsz
.
Neben ZMODEM gibt es weitere Varianten des Protokolls, wie XMODEM, YMODEM, SEXYZ und SyncTERM.
Das
lrzsz Paket besteht aus den Programmen: rb, rx, rz, sb, sx und sz. Manche werden zum Senden von Daten via X/Y/ZMODEM benötigt, andere zum Empfangen.
Für uns sind an dieser Stelle nur sz
und rz
interessant.
Generell sind das Protokoll und die CLI-Tools heute weitestgehend obsolet geworden, da viele Dateitransferprotokolle das Fortsetzen von fehlerhaften Übertragungen unterstützen und dabei auch noch erheblich schneller sind. Aber für eine Sache möchte ich den ZMODEM-Dateitransfer nicht missen, denn die Verwendung spart mir einiges an Arbeit:
Mit
ZSSH gibt es einen Wrapper für den SSH Client, der native Unterstützung für das ZMODEM Protokoll mitbringt. Wenn ich mich per SSH zu einem anderen Computer verbinde,
kann ich aus der aktiven Session heraus Dateien übertragen, von lokal nach remote oder umgekehrt. Einzig alleine, das Paket “lrzsz” muss auf diesem Computer installiert sein.
Ebenfalls bietet mir zssh
die Möglichkeit lokale Befehle auszuführen, ohne eine weitere Shell zu öffnen. Das funktioniert auch dann, wenn man per SSH von einem Server zum nächsten springt, also diverse Jumphosts zwischen sich
und dem Ziel liegen!
Nachfolgend ein Beispiel zur Veranschaulichung:
Ich erstelle lokal eine Datei TEST
mit dem Inhalt “HALLO”, danach verbinde ich mich mit zssh
via SSH zu einem entfernten Computer, auf dem das Programm lrzsz
bereits installiert ist.
Mit der Tastenkombination <CTRL> + <SPACE>
öffne ich das Menü von zssh. Folgende Befehle stehen mir nun zur Verfügung:
help
Builtins :
? : print this message
rz : receive files
sz <files> : send files
^D|exit|quit : exit file transfer mode
disconnect : disconnect and exit
Usage :
Download : [remote] sz <files>, [transfer mode] rz
Upload : [transfer mode] sz <files>
Tips:
- If file transfer never completes, use the -e option of sz/rz
- Transfers can be interrupted with ^C
- If you get stuck in rz/sz (for example you've just ran rz, but you
then decided not to transmit anything), hit a dozen ^X to stop it
- Use sz -y <files> to overwrite remote files
Mit sz TEST
wird die lokale Datei auf den per SSH verbundenen PC übertragen, zssh führt nun automatisch rz
aus, das den Empfang der Daten aktiviert. Im Anschluss nutze ich die Möglichkeit lokale Befehle auszuführen und
lösche die Datei TEST. Jetzt lade ich die Datei herunter, indem ich den Transfer mit sz TEST
auf dem entfernten Computer starte und mit <CTRL> + <SPACE>
das zssh Menü in der lokalen Shell öffne und den Download mit rz
bestätige.
Das geht natürlich auch mit mehreren Dateien gleichzeitig.
Ich gebe zu; es hört sich komplizierter an als es ist. Wenn man erst einmal verinnerlicht hat, das sz zum Senden und rz zum Empfangen des ZMODEM Transfers verwendet wird, dann macht man das ganze blind :)