Copyright © KC Green

Dateien mit Hilfe von zssh übertragen

 infrastructure   howto 

zssh - ein Wrapper für SSH mit Unterstützung für ZMODEM

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 :)