Tutorial: Zugriff auf einen SFTP Server mit LFTP unter Debian

Geschrieben von Eric Scheibler am 10.10.2010

Ich war auf der Suche nach einem kommandozeilenbasierten FTP / SFTP Client für Linux und habe mich nach kurzer zeit für LFTP entschieden. Im folgenden eine kleine Einführung und die wichtigsten Befehle.

Installation:

# apt-get install lftp

Nun sollte man in einen Ordner wechseln, in dem man die zu ladenden Dateien erstmal zwischenspeichern kann, Erklärung folgt später:

cd /downloads

Als nächstes möchte ich mich mit einem SFTP Server verbinden (für FTP dementsprechend anpassen):

lftp -u USERNAME,PASSWORD -p PORT sftp://yourdomain.com/

Hat der Verbindungsaufbau geklappt, so befindet man sich jetzt in der LFTP Shell, die der Linux Shell sehr ähnlich ist. Die meisten Befehle wie cd, ls, und grep funktionieren, genau wie die Autovervollständigung mit der Tab - Taste.

Grundsätzliche Bedienung

Auf dem entfernten Ordner gibt es beispielsweise das Verzeichnis /documents und darin die Files /documents/file1 und /documents/file2 Um eine Datei (file1) herunterzuladen, genügt:

get /documents/file1

File1 wird sofort geladen und landet lokal in dem Ordner, in dem man sich befunden hat, bevor man LFTP gestartet hat, also in /downloads.

Die wichtigsten Befehle:

  • Alternative zum obigen Kommando:
get /documents/file1cd /documents
get file1 file2
  • Für den Fall, dass die Datei gleich noch umbenannt werden soll:
get /documents/file1 -o readme
  • Soll die Datei aber in den Ordner /archiv/dokumente geladen werden so geht das mit:
get -O /archiv/dokumente /documents/file1
  • Einen ganzen Ordner downloaden:
mirror -p Ordner_auf_Server Lokaler_Ordner

also z.B.:

mirror -p /documents /archiv
  • oder etwas hochladen:
mirror -p -r /archiv/bilder /html/pics

Der Parameter -p bedeutet, dass die Rechte der Dateien und Ordner nicht mit kopiert, sondern die Elemente nach den Einstellungen des jeweiligen Systems erstellt werden. Ich möchte auf meinem lokalen System z.B. alle Files mit den Rechten 775 erstellen, auf einem Webserver liegen die Dateien in der Regel mit den Zugriffsrechten 755 vor. Umgekehrt könnten hochgeladene Files mit den Rechten 775 ein Sicherheitsrisiko auf dem entfernten Server darstellen.

  • Alles weitere unter
help mirror
  • LFTP beenden:
exit

Queues

Diese wenigen Befehle sollten für die meisten Aufgaben ausreichend sein. Aber wenn man ein paar große Dateien und Ordner nacheinander laden will, braucht man noch eine Queue. Hier ein Beispiel:

queue stop
queue mirror -p Ordner1
queue get Datei2 Datei18
queue start

“queue stop” hält eine laufende Warteschlange an bzw. startet eine neue. Es soll erst “Ordner1” und danach die Dateien “Datei2” und “Datei18” geladen werden. Nach dem Befehl “queue start” beginnt das Herunterladen automatisch im Hintergrund.

Weitere Befehle:

  • Fortschritt der Queue:
jobs -v
  • Mit dem folgenden Befehl kann man auch während die Queue abgearbeitet wird, neue Befehle wie beispielsweise das Herunterladen von “Ordner12” anfügen,
queue mirror -p Ordner12
  • löscht das letzte Element:
queue -d
  • löscht das n-te Element aus der Warteschlange:
queue -d n

Ein kleines Problem zum Schluss: benutzt man den Befehl “get” in einer Queue (queue get …) so funktioniert der Parameter -O zwar wie gewünscht, jedoch kann man den Pfad nicht mit der Autovervollständigung finden, da diese bereits die Ordner des entfernten Servers durchsucht. Also muss an den Zielpfad entweder von Hand eingeben oder, wenn man ihn nicht weiß, die Datei erstmal in einen zentralen Ornder laden und sie später verschieben.

Einsatz in Shell Skripten

Für den Einsatz in Shell Skripten empfehlen sich die Optionen “-c”, “-e” und “-f”. Hier ein Beispiel für den Download einer Datei vom Server ins lokale Temp Verzeichnis:

lftp -c "set cmd:at-exit; set net:timeout 10; set net:max-retries 3;     get sftp://USER:PASSWORD@HOST:PORT/myfolder/loadme -o /tmp"

Ohne Timeout und Max-Retries würde Lftp bei einem Verbindungsfehler nicht abbrechen und so das Skript aufhalten.

Quellen

Manpage von LFTP