LFTP erweitert FTP auf der Kommandozeile

Aus LinuxUser 10/2017

LFTP erweitert FTP auf der Kommandozeile

© Jean-Nol Tercier, 123RF

Ausgebaut

Mit LFTP bietet sich eine Alternative für den FTP-Befehlssatz an, die viele Protokolle unterstützt und dabei unzählige Parameter bietet.

Beim 1985 erstmals definierten File Transfer Protocol (FTP) zum Übertragen von Dateien zwischen zwei Rechnern handelt es sich um ein Relikt aus den Kindertagen der modernen IT. Heute hat es viel von seiner früheren Bedeutung eingebüßt, nicht zuletzt wegen einiger gravierender Sicherheitsprobleme: Weder verschlüsselt FTP Benutzernamen und Passwort, noch schützt es die Daten während des Transfers gegen Manipulationen.

Mit FTP über SSL mittels FTPS oder per SFTP, das SSH zur Übertragung nutzt, lässt sich dem entgegenwirken. Beide Verfahren gelten als ähnlich sicher und verschlüsseln sowohl Daten als auch Metadaten während der Übertragung. SFTP erweist sich in den meisten Anwendungsfällen als flexibler und wesentlich einfacher in der Praxis.

Alternativen

Es gibt schon lange Alternativen zu FTP – unter Linux dient etwa schon seit Urzeiten Secure Copy (scp) dazu, per Kommandozeile Daten auf andere Maschinen zu schieben. Mittlerweile hat sich auch WebDAV zu einem brauchbaren Ersatz entwickelt, das Web Distributed Authoring and Versioning, eine Art Erweiterung von HTTP um neue Befehle.

Trotzdem bleibt FTP ein Dauerbrenner – dafür gibt es diverse Gründe. Dazu zählt, dass viele Webhoster bei ihren günstigen Webspace-Angeboten lediglich FTP anbieten und WebDAV oder SSH außen vor lassen. FTP dürfte uns also noch eine Weile begleiten, weshalb wir das Beste daraus machen sollten.

Dieser Artikel behandelt LFTP, eine bereits seit 1997 entwickelte, sehr mächtige Erweiterung des ursprünglichen FTP-Befehlssatzes. Es wird von Alexander Lukyanov entwickelt, unterliegt der GNU Public Licence (GPL) und erhielt zuletzt im Juli 2017 eine Aktualisierung auf Version 4.8.0 [1]. LFTP unterstützt eine ganze Reihe von Protokollen, wozu neben reinen FTP auch FTPS, SFTP, HTTP, HTTPS, HFTP, FXP, Fish und Bittorrent zählen.

Besonderheiten

Von den meisten anderen FTP-Clients für die Kommandozeile hebt sich LFTP durch erweiterte Funktionen ab, wie das rekursive Spiegeln und Aktualisieren ganzer Verzeichnisbäume und das Verwalten von Lesezeichen. Mehrere simultane Sitzungen zu verschiedenen Servern realisiert LFTP durch das Zuweisen von Befehlen zu Slots in einer eigenen Shell. Zudem lassen sich geplante Transfers in Warteschlangen organisieren und zeitlich steuern sowie die zu nutzende Bandbreite regeln. Bricht eine Übertragung ab, nimmt LFTP sie später an gleicher Stelle wieder auf. Beenden Sie LFTP, arbeitet es noch laufende Aufgaben im Hintergrund ab.

Client/Server-Modell

LFTP findet sich in den Repositories der meisten Distributionen, sodass Sie es in aller Regel bequem über das Paketmanagement installieren.

Um LFTP ohne aktiven Server zu testen, installieren Sie am besten auf einer zweiten lokalen Maschine einen FTP-Server, zu dem LFTP dann eine Verbindung aufbaut. Dafür eignet sich beispielsweise der Very secure FTP Daemon oder kurz Vsftpd [2], der für einfache Tests fast ohne Konfiguration auskommt. Bevor es losgeht, müssen Sie lediglich in /etc/vsftpd.conf das Kommentarzeichen “#” vor der Zeile #write_enable=YES entfernen.

Zu guter Letzt erstellen Sie für den Test auf dem Client-Rechner noch ein Verzeichnis und befüllen es mit einigen Daten.

LFTP selbst gebaut

Falls Sie LFTP mit FTPS nutzen möchten, müssen Sie unter Umständen das Paket mit SSL-Unterstützung selbst kompilieren. Über die Kommandozeile prüfen Sie nach der Installation, ob das bei Ihnen notwendig ist. Zunächst stellen Sie mittels des Befehls which lftp fest, wo LFTP installiert wurde. Nach Aufruf von ldd /Pfad/zu/lftp sehen Sie in dessen Ausgabe nach, ob am Anfang einer der Zeilen “libssl” steht (Abbildung 1). Ist das nicht der Fall, und Sie möchten FTPS anstelle von SFTP [3] nutzen, dann folgen Sie den Anweisungen im Kasten “LFTP im Eigenbau”.

Abbildung 1: Ohne Unterstützung der LibSSL klappt das Nutzen von FTPS nicht.

Abbildung 1: Ohne Unterstützung der LibSSL klappt das Nutzen von FTPS nicht.

Beim Systemstart sucht LFTP nun in den Dateien /etc/lftp.conf, ~/.lftprc und ~/.lftp/rc (in dieser Reihenfolge) nach einer Konfiguration. Direktiven, die Sie im Home-Verzeichnis anlegen, haben Vorrang vor der globalen Konfiguration in /etc. Die Anweisungen starten immer mit set und folgen dem Schema set Option:Schalter [on|off].

LFTP im Eigenbau

Unter Debian müssen Sie zunächst mit den Paketen libgnutls30, libgcc1, libreadline-dev, libssl-dev, libtinfo5, libunwind8 und libghc-zlib-dev die Abhängigkeiten installieren. Je nach Ausgabe des genutzten Systems kann es sein, dass Sie andere Versionen dieser Pakete benötigen. Sollte weitere Software fehlen, teilt ./configure das in der Regel mit. Sie bauen LFTP wie in Listing 1 gezeigt mit dem üblichen Dreisatz ./configure, make und make install. Anschließend testen Sie mit ldd, ob die selbst gebaute LFTP-Version nun SSL unterstützt.

Listing 1

$ wget http://lftp.yar.ru/ftp/lftp-4.8.0.tar.gz
$ tar xfz lftp-4.8.0.tar.gz
$ cd lftp-4.8.0
$ ./configure --with-openssl=/usr/lib
$ make
$ sudo make install
$ ldd /usr/local/bin/lftp | grep ssl
  libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fbe89dbd000)

Die Praxis

Für Tests setzen Sie am besten zwei lokale Rechner ein, die als Server und Client dienen. LFTP verhält sich dabei genauso wie beim Zusammenspiel mit entfernten Servern, Problemquellen und Fehler lassen sich aber einfacher lokalisieren. Falls Sie nichts anderes angeben, verwendet LFTP das SFTP-Protokoll. Vom Standard-Port 21 abweichende Ports geben Sie am Ende des Befehls zum Verbinden in der Form :Port ein.

Für mehr Rückmeldungen fügen Sie dem Aufruf von lftp die Option -d an, die Debug-Informationen liefert. Der Parameter -h beziehungsweise --help bietet nur wenig Hilfestellung, wenn es um die Optionen der Anwendung geht. Eine übersichtliche Version der Manpage von LFTP bietet Livewire auf seiner Webseite [4].

Zum Eingewöhnen in die LFTP-Shell laden Sie zunächst einmal Dateien vom Server herunter oder auf diesen hoch. Dazu melden Sie sich nach dem Schema lftp User@[FQDN|IP] auf dem Server an, beispielsweise mit dem Kommando lftp ft@192.168.178.123). Nach dem Herstellen der Verbindung befinden Sie sich in der Shell von LFTP.

Ein ls listet den aktuellen Verzeichnisinhalt auf dem Server auf. Mit einem vorangestellten Ausrufezeichen ! leiten Sie das Kommando auf den Client um, !ls zeigt also den Inhalt des aktuellen lokalen Arbeitsverzeichnisses (Abbildung 2).

Abbildung 2: Bash-Befehle mit vorangestellten Ausrufezeichen wirken auf den Client.

Abbildung 2: Bash-Befehle mit vorangestellten Ausrufezeichen wirken auf den Client.

Manche Kommandos lassen sich auch mit einem vorangestellten kleinen L (“local”) auf dem Client ausführen, andere mit beiden Schaltern. Die Bedienung ist hier nicht ganz konsistent. Zur Vereinfachung dürfen Sie Befehls-Aliase nach eigenem Bedarf definieren.

Hoch und runter

Zum Hochladen einer Datei vom Client auf den Server dient der Befehl put, den Sie um dem Namen der fraglichen Datei ergänzen (put Datei). Durch den beim Einloggen verwendeten Parameter -d sehen Sie im Detail, was im Hintergrund geschieht. Soll die Datei in ein bestimmtes Verzeichnis, wechseln Sie mit cd dorthin und setzen dann put ein.

Nach demselben Schema funktioniert get beim Herunterladen einer Datei. Mit pget bietet LFTP jedoch noch eine Alternative, die den Datentransfer auf mehrere parallele Verbindungen verteilt und so das Herunterladen von schlecht angebundenen Servern beschleunigt. In der Praxis wechseln Sie zunächst mit !cd oder lcd in das Verzeichnis, in dem die heruntergeladene Datei landen soll. Darauf folgt dann get Datei beziehungsweise pget Datei.

Spiegeln und Synchronisieren

Um einen Ordner oder einen ganzen Verzeichnisbaum auf einen Server zu schieben, kommt der Befehl mirror zum Einsatz. Stellen Sie mit lpwd sicher, dass Sie sich lokal im richtigen Verzeichnis befinden. Gegebenenfalls ändern Sie dieses mit lcd. Gleiches erledigen Sie mit pwd und, falls nötig, cd auf der Seite des Servers. Der Befehl zum Hochladen des Verzeichnisses lautet dann einfach mirror -R, der umgekehrte Weg vom Server zum Client funktioniert mit mirror.

Alternativ können Sie die Verzeichnisse nach dem Schema mirror -R /Server-Ordner/ /Client-Pfad/ im Befehl festlegen. Ändern Sie nach dem Abgleich eine Datei oder den Dateibestand im Quellverzeichnis und führen dann das Mirror-Kommando neu aus, gleicht LFTP nur die Änderungen mit der Gegenseite ab. Auch mirror lässt mehrere parallele Verbindungen zu, die Sie per mirror -P anstoßen oder mit mirror --parallel=n genauer definieren.

Gerade bei größeren Übertragungen spielt LFTP eine seiner Stärken aus. Es zeigt einen Fortschrittsbalken und die Übertragungsgeschwindigkeit an, wobei sich Letztere bei Bedarf auch drosseln lässt. Bricht einmal eine Übertragung ab, lässt sie sich mit dem Parameter -c wieder aufnehmen, selbst wenn Sie LFTP zwischenzeitlich beendet haben.

Ebenso beherrscht LFTP mehrere Übertragungen gleichzeitig, die sich nach Belieben in den Hintergrund schicken und wieder nach vorn holen lassen. Um Einzelheiten der vorgenommenen Aktionen einzusehen, werfen Sie einen Blick in das Verzeichnis ~/.lftprc/: Dort liegen Protokolle aller Sitzungen, die detailliert den Ablauf dokumentieren.

Nach Abschluss aller Arbeiten beenden Sie LFTP mit exit oder bye und kehren auf die Shell-Kommandozeile zurück.

Erweiterte Funktionen

Neben der Fähigkeit zum Übertragen von Dateien und Verzeichnissen zwischen Client und Server beherrscht LFTP noch weitere Funktionen und verfügt über Hunderte Parameter, um diese zu steuern. Die wichtigsten Befehle fasst die Tabelle “Befehlsreferenz” kurz zusammen.

So definieren Sie etwa mit dem Parameter at Uhrzeit zeitgesteuerte Übertragungen. Mit queue erstellen Sie Warteschlangen, mit -n Anzahl teilen Sie den Dateiversand in mehrere Tranchen auf. Möchten Sie eine Aktion später wiederholen, legen Sie mit bookmark add Name ein Lesezeichen dafür an. Mit bookmark list sehen Sie alle Lesezeichen an.

Generell können Sie mit -P oder --parallel=n parallel verarbeitete Transfers anstoßen. Mit FXP unterstützt LFTP Übertragungen von Server zu Server unter Ausschluss des Clients. Per HTTP können Sie Webseiten herunterladen, sogar das Torrent-Protokoll beherrscht das Programm. Obendrein lässt sich LFTP auch per Skript steuern.

Kommando

Funktion

Dateitransfers

put Datei

Datei vom Client zum Server

get Datei

Datei vom Server zum Client

Abgleich ganzer Verzeichnisse

mirror -R

Verzeichnis vom Client zum Server

mirror

Datei vom Server zum Client

Lesezeichen

bookmark add Name

Lesezeichen anlegen

bookmark list

Lesezeichen auflisten

open Name

Lesezeichen öffnen

Zeitsteuerung und Stapelverarbeitung

at hh:mm Befehl

Zeitsteuerung

queue mirror Ordner

Warteschlange erstellen (Verzeichnis)

queue mirror Datei

Warteschlange erstellen (Nur eine Datei)

queue start

Warteschlange starten

Fazit

Die Bedienung des sehr mächtigen und vielseitigen LFTP lässt sich vergleichsweise leicht erlernen. Viele Kommandos gleichen oder ähneln denen aus der Shell oder dem herkömmlichen FTP-Befehlssatz. Die Anwendung erhält auch nach 20 Jahren Entwicklung noch aktiv Unterstützung, für 2017 liegt etwa seit wenigen Tagen bereits das vierte Update vor.

Eine Dokumentation auf aktuellem Stand fehlt LFTP hingegen. Viele der Anleitungen, die sich im Netz finden, stimmen nicht mehr. Dennoch: Wenn Sie die Kommandozeile schätzen und FTP noch nutzen wollen oder müssen, können wir Ihnen LFTP als leistungsfähigere Alternative wärmstens empfehlen. 

Glossar

FXP

File Exchange Protocol. Ein in FTP definiertes, dort jedoch unbenanntes Verfahren, um über einen Client Dateiübertragungen zwischen zwei Servern zu steuern. Die Dateien wandern dabei zeitsparend direkt von Server zu Server. Viele aktuelle FTP-Clients unterstützen FXP.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 10/2017 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