Daten mit SSH und Zssh über langsame Verbindungen transferieren

Aus LinuxUser 07/2020

Daten mit SSH und Zssh über langsame Verbindungen transferieren

© Theeradech Sanin, 123RF

Auf schmalem Pfad

Das altgediente Z-Modem aus den Mailbox-Zeiten der Achtzigerjahre lebt noch immer – und hilft beim schnellen Datentransfer über langsame Verbindungen.

Nicht überall gelingt der Zugriff auf Daten per SFTP. Trotzdem brauchen Sie nicht auf einen unsicheren Dienst wie FTP (sofern überhaupt noch vorhanden) auszuweichen.

An der Quelle

Im ersten Schritt werfen Sie eine oder mehrere Dateien in die Pipe – dazu benötigen Sie lediglich Cat. Das geht kurz und unkompliziert (Listing 1, erste Zeile). Damit ist schon der Grundstein für ein kombiniertes Kommando zum Übertragen von Daten gelegt.

Wollen Sie einen ganzen Verzeichnisbaum von Rechner zu Rechner transferieren, verpacken Sie ihn dazu mit Tar (zweite Zeile). Die Tar-Option c steht für “create”, also das Anlegen eines Archivs; die Kompression erzielen Sie mit z. Damit Sie im Bilde bleiben, teilt das Programm mit v den Arbeitsstand mit, und f betont, dass es sich beim Ziel um eine Datei und nicht um ein Bandgerät handelt.

Normalerweise folgt an dieser Stelle die Angabe des Tar-Archivs. Stattdessen zeigt das Minuszeichen an, dass es die Daten in die Pipe schreiben soll. Schließlich geben Sie vor dem Pipe-Strich noch das Verzeichnis an, das Sie packen wollen.

Listing 1

$ cat Datei | [...]
$ tar czvf - Verzeichnis | [...]

Am Ziel

Das SSH-Kommando folgt in beiden Fällen nach der Pipe. Im Regelfall geben Sie den Benutzernamen auf dem Zielsystem, den DNS-Namen oder die IP-Adresse des Zielrechners sowie den Befehl ein, der die Daten aus der Pipe zurückschreibt.

Bei Cat leiten Sie mittels desselben Befehls ohne Angabe einer Datei die Ausgabe um (Listing 2, erste Zeile). Bei Tar braucht es eine Sub-Shell, über die Sie ins Zielverzeichnis springen und aus der Pipe schreiben (zweite Zeile).

Möglich ist dies alles, weil SSH es erlaubt, anstelle einer interaktiven Sitzung nur ein einzelnes Kommando auf dem Zielsystem auszuführen. Das erfordert, dass das Zielverzeichnis vor dem Übertragen der Daten im zweiten Beispiel bereits existiert.

Listing 2

$ cat > Zieldatei
$ cd Verzeichnis && tar xzpvf -

Auf Sendung

Dient das Tool Cat als Sender und Empfänger, geben Sie im Terminal das Kommando aus der ersten Zeile von Listing 3 ein. Abbildung 1 zeigt den Vorgang und außerdem, wie Sie in einem Rutsch prüfen, ob die übertragene Datei korrekt angekommen ist.

Abbildung 1: Mittels Cat und einer Pipe übertragen Sie auf einfache Weise eine einzelne Datei auf einen anderen Host.

Abbildung 1: Mittels Cat und einer Pipe übertragen Sie auf einfache Weise eine einzelne Datei auf einen anderen Host.

Das Übertragen eines ganzen Verzeichnisbaums oder Verzeichnisses gelingt auf ähnliche Weise (Listing 3, zweite Zeile). Als Zielverzeichnis dient im Beispiel in Abbildung 2 das Home-Verzeichnis.

Abbildung 2: Wollen Sie ein ganzes Verzeichnis übertragen, hilft der Archiver Tar weiter.

Abbildung 2: Wollen Sie ein ganzes Verzeichnis übertragen, hilft der Archiver Tar weiter.

Listing 3

$ cat Daten | ssh Benutzer@Host "cat > Datei"
$ tar czvf - Verzeichnis | ssh Benutzer@Host 'cd Verzeichnis && tar xzpvf -'

Daten holen

Dieser Mechanismus funktioniert genauso umgekehrt, also zum Abholen von Dateien und Verzeichnissen. Hier kommen Sie im Einzelfall sogar ohne eine Pipe aus (Listing 4, erste Zeile). Abbildung 3 zeigt den Ablauf beim Abholen einer Datei.

Abbildung 3: Es gibt zwar mit SCP ein spezielles Tool zum Herunterladen von Dateien von einem entfernten Host, aber wenn Sie wollen, kommen Sie auch ohne aus.

Abbildung 3: Es gibt zwar mit SCP ein spezielles Tool zum Herunterladen von Dateien von einem entfernten Host, aber wenn Sie wollen, kommen Sie auch ohne aus.

In Kombination mit Tar setzen Sie wiederum eine Pipe ein (Listing 4, zweite Zeile). Dabei unterscheiden Sie zwischen dem Pfad und dem Verzeichnis. Der Pfad ist das Verzeichnis, in dem sich das Verzeichnis befindet, das Sie herunterladen wollen. Am Schluss der Pipe schreibt der lokale Tar-Befehl das Verzeichnis auf die Platte zurück. In Abbildung 4 sehen Sie den Ablauf beim Kopieren des Verzeichnisses.

Abbildung 4: Möchten Sie ein Verzeichnis von einem entfernten Rechner herunterladen, benötigen Sie die Unterstützung durch ein zweites Programm wie Tar.

Abbildung 4: Möchten Sie ein Verzeichnis von einem entfernten Rechner herunterladen, benötigen Sie die Unterstützung durch ein zweites Programm wie Tar.

Listing 4

$ ssh Benutzer@Host cat Datei > Datei
$ ssh Benutzer@Host 'cd Pfad && tar czfv - Verzeichnis' | tar xzfv -

Weitere Möglichkeiten

Die vorgestellten Mechanismen eignen sich nicht nur zum Übertragen von Daten: Bei Bedarf leiten Sie die Ausgaben anderer Shell-Kommandos auf diese Weise um. So rufen Sie etwa eine gemeinsame Log-Datei für bestimmte Parameter, wie die Belegung des Dateisystems, von mehreren Computern ab und werten sie aus. Das Sammeln von Messwerten, Kamerabildern oder dergleichen gelingt ebenfalls auf diese Weise. Abbildung 5 zeigt, wie Sie die Ausgabe eines Kommandos auf ein Zielsystem übertragen, um sie dort als Datei abzulegen.

Abbildung 5: Die Kombination aus SSH und einem Kommando ermöglicht es, auf einfache Weise Log-Daten zu einem zentralen Host zu übertragen.

Abbildung 5: Die Kombination aus SSH und einem Kommando ermöglicht es, auf einfache Weise Log-Daten zu einem zentralen Host zu übertragen.

Umgekehrt dürfen Sie die Ausgaben von Kommandos auf dem Zielsystem abholen und in eine Datei umleiten. Dabei geben Sie dem SSH-Aufruf den Shell-Befehl als Parameter mit und leiten das Ergebnis bei Bedarf lokal in eine Datei um (ohne Pipe). Abbildung 6 zeigt die Abfrage zur Auslastung des Dateisystems auf einem entfernten Rechner.

Abbildung 6: Wer einen entfernten Host überwacht, dem hilft die Abfrage von Betriebsparametern per SSH.

Abbildung 6: Wer einen entfernten Host überwacht, dem hilft die Abfrage von Betriebsparametern per SSH.

Sicherheit und Komfort

Führen Sie ein Kommando auf einem entfernten Rechner aus oder transferieren Daten von oder zu diesem, erfordert das in der Regel die Eingabe des Passworts für den Account, mit dem Sie auf dem Remote-Host arbeiten. Arbeiten Sie in einem geschützten Netz, bietet sich die Arbeit mit einem passwortlosen Schlüssel an.

Einen solchen Schlüssel generieren Sie mittels Ssh-keygen. Den öffentlichen Schlüssel übertragen Sie mit Ssh-copy-id auf das entfernte System. Dabei müssen Sie noch einmal das Benutzerpasswort für den entfernten Rechner eingeben.

Der Einsatz solcher Schlüssel birgt das Risiko, dass ein Angreifer über einen Punkt Zugriff auf viele weitere Rechner hätte. Wägen Sie daher genau ab, ob der Komfort einer solchen Strategie die Einbußen an Sicherheit aufwiegt.

Als Alternative bietet sich der Einsatz von Ssh-agent in Kombination mit Schlüsseln an, die Sie dann wiederum mit einem Passwort schützen. Hier wäre ein Einbruch in andere Systeme nur noch über eine laufende Session zu bewerkstelligen. Allein der Besitz des Schlüssels brächte, ein starkes Passwort vorausgesetzt, dem Angreifer kaum einen Vorteil.

Z-Modem per SSH

In den Achtzigerjahren des letzten Jahrhunderts waren Terminalsitzungen und Datenübertragungen per serieller Verbindung und über Modemstrecken noch üblich. Damals nutzte man dabei Z-Modem als Protokoll, um Dateien fehlerfrei zu übertragen. Alle Terminalprogramme implementierten es, und so mancher Treiber gelangte auf diesem Weg aus einem Mailbox-System (BBS) auf den PC.

Das Internet, wie Sie es heute kennen, hat das alles zwar verdrängt, die Technik als solche existiert aber nach wie vor. Um sie zu nutzen, installieren Sie die beiden Pakete zssh und lrsz auf beiden Hosts (Quelle und Ziel). Anschließend starten Sie die SSH-Sitzung mit zssh genauso wie mit SSH:

$ zssh Benutzer@Host

Beim Anmelden erhalten Sie bereits den Hinweis auf die beiden Betriebsmodi. Zunächst haben Sie die Möglichkeit, hier wie gewohnt Befehle an die Shell abzusetzen. Über [Strg]+[Leer] wechseln Sie in den Modus zum Übertragen von Dateien. Sie erkennen dies am geänderten Prompt, der sich nun auf zssh > reduziert. Mit dem Befehl disconnect beenden Sie in diesem Modus die Verbindung.

Datei holen

Wollen Sie eine Datei von einem entfernten System laden, erledigen Sie das in drei Schritten: Erst melden Sie sich wie oben gezeigt am Zielsystem an. Mit der Eingabe des Befehls sz Dateiname am normalen Shell-Prompt beginnen Sie mit dem Senden einer Datei. Wechseln Sie in derselben Session nun mittels [Strg]+[Leer] den Modus. Nun geben Sie das Kommando rz ein, wodurch die Übertragung startet (Abbildung 7).

Abbildung 7: Beim Holen einer Datei von einem entfernten System wechseln Sie nach dem Senden der Daten den Modus, um sie am lokalen Host entgegenzunehmen.

Abbildung 7: Beim Holen einer Datei von einem entfernten System wechseln Sie nach dem Senden der Daten den Modus, um sie am lokalen Host entgegenzunehmen.

Wollen Sie eine Datei an das entfernte System senden, gelingt das etwas einfacher: Sie melden sich am entfernten System an, wechseln sofort den Modus und beginnen mit sz Dateiname den Transfer. Nach Abschluss der Übertragung beenden Sie bei Bedarf mit disconnect die Sitzung (Abbildung 8).

Abbildung 8: Zum Senden einer Datei benötigen Sie nur ein Kommando, das Sie nach dem Wechsel des Modus direkt eingeben.

Abbildung 8: Zum Senden einer Datei benötigen Sie nur ein Kommando, das Sie nach dem Wechsel des Modus direkt eingeben.

Cryptcat

Geht gar nichts mehr, also weder SSH noch FTP oder Ähnliches, hilft Ihnen eventuell Cryptcat aus der Bredouille. Der Netcat-Klon ist um mancherlei Funktionen entschärft, überträgt die Daten aber verschlüsselt. Die Tabelle “Cryptcat-Optionen” führt einige wichtige Funktionen auf.

Syntax

Erläuterung

-k Kennwort

Kennwort zum Verbindungsaufbau

-p Port

Port-Angabe

-l

Empfangsmodus

-z

Portscan-Modus

-v

Betriebsmeldungen

-vv

Ausführliche Betriebsmeldungen

-w Sekunden

Timeout nach Sekunden

Die Arbeitsweise ist hier aber eine andere: Der Transfer setzt voraus, dass an jedem Rechner eine Person sitzt. Am besten kommunizieren Sie parallel oder im Vorfeld per Telefon, um sich auf Port und Kennwort zu einigen. Die Software arbeitet stets mit einer Pipe. Auf diese Weise übertragen Sie bei Bedarf sogar Ausgaben von Programmen. Besonders Findige konstruieren sogar einen einfachen Chat mit dieser Software.

Haben sich beide Seiten auf entsprechende Parameter geeinigt, stellt eine den Empfangsmodus her. Das geschieht über den Befehl aus der ersten Zeile von Listing 5. Als Kommando dient dasselbe, das der Sender verwendet, etwa Tar. Das Übertragen erfolgt mittels der Syntax aus der zweiten Zeile.

Listing 5

$ cryptcat -k "Kennwort" -l -p Port | Kommando
$ Kommando | cryptcat -k "Kennwort" -w Timeout Host Port

Abbildung 9 zeigt ein Beispiel, bei dem mittels Tar eine einzelne Datei übertragen wird. Mit einem Wildcard wie dem Asterisk (*) würde hingegen der ganze Inhalt des Verzeichnisses gesendet und empfangen.

Abbildung 9: Die Datenübertragung mit Cryptcat erfordert immer zusätzliche Kommunikation auf einem Nebenkanal, etwa einem Telefon, um bestimmte Parameter für die Kommunikation festzulegen.

Abbildung 9: Die Datenübertragung mit Cryptcat erfordert immer zusätzliche Kommunikation auf einem Nebenkanal, etwa einem Telefon, um bestimmte Parameter für die Kommunikation festzulegen.

Fazit

Selbst abseits gewohnter, serverbasierter Übertragungswege bringen Sie Daten von einem Linux-System zum anderen. Dazu genügt eine reine SSH-Sitzung oder ein Hilfsmittel wie Cryptcat. (agr)

Der Autor

Harald Zisler beschäftigt sich seit den frühen 1990er-Jahren mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Zeitschriftenbeiträge und Bücher.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 07/2020 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben