SFTP und FTP unter Linux mounten

Unter Windows benutze ich Webdrive um direkt auf einem Server an Dateien arbeiten zu können. Unter Linux habe ich bisher immer auf die Konsole und VIM per Putty zugegriffen, würde aber auch dort gern mit einem grafischen Editor arbeiten um bei größeren Projekten besser navigieren zu können. Heute habe ich mich damit (endlich) mal etwas länger beschäftigt und eine schöne Lösung gefunden.

UPDATE 2011: Das Ganze geht inzwischen mit Gigolo und gVFS deutlich komfortabler, inklusive GUI. Der Artikel bleibt für Referenzzwecke stehen.

Das Zauberwort heißt FUSE und ist bei Ubuntu (und anderen) bereits im Repository vorhanden. Für SFTP und FTP brauchen wir zwei Pakete:

$ sudo aptitude install sshfs curlftpfs

Die Abhängigkeiten werden hierbei natürlich mit installiert (curl, fuse-utils etc.). Es sind allerdings noch ein paar Schritte notwendig, bis der „normale“ User die Funktionen nutzen kann. Zunächst muss der User der Gruppe „fuse“ hinzugefügt werden:

$ sudo adduser USER fuse

Jetzt die Gruppe für „/dev/fuse“ noch ändern (das ist IMHO ein Bug) und einen Mountpoint anlegen für den Nutzer:

$ sudo chgrp fuse /dev/fuse
$ sudo mkdir -p /mnt/mein_ftp
$ sudo chown USER.USER /mnt/mein_ftp

Und schon kann es losgehen. Folgender Befehl bindet einen beliebigen FTP-Zugang an oben angelegten Mountpoint:

$ curlftpfs USERNAME:PASSWORT@beispiel.de /mnt/mein_ftp/

Danach kann man beliebig mit Editor, Konsole und anderen Programmen auf dem FTP-Server rumspielen. Zusätzlich unterstützt curlftpfs eine Verschlüsselung der Verbindung, was ein echter Vorteil gegenüber dem herkömmlichen FTP-Protokoll ist.

Für SFTP sieht der Befehl etwas anders aus. Falls SSH auf einem anderen als dem Standard-Port läuft, kann man dem sshfs-Befehl den Port per -pPORT mitteilen. Falls der Standard-Port (21) eingestellt ist, mountet folgender Befehl einen SFTP-Server:

$ sshfs USER@beispiel.de:/ /mnt/mein_ftp/

Hierbei kann hinter dem Host der zu mountende Pfad angegeben werden (in diesem Fall root), gefolgt vom gewünschten Mountpoint. Um den gemounteten Server wieder loszuwerden gibt es „fusermount“:

$ fusermount -u /mnt/mein_ftp/

Das war das ganze Geheimnis in Kurzform. Für mehr Informationen helfen „man sshfs“ und „man curlftpfs“ weiter. Ich hoffe dieser Artikel hilft denjenigen, die lieber mit einem grafischen Editor statt mit Putty und Konsolen-VIM an Remote-Projekten arbeiten die auf einem FTP oder SFTP-Server liegen.

Und wieder eine Funktion, die man sich unter Windows teuer erkaufen muss, welche es unter Linux allerdings schon seit Jahren gibt – und das kostenlos. Zugegeben, eine GUI wäre schön… aber ein paar Shellskripte im Userverzeichnis für die häufig benötigten Serverzugänge tun’s auch.

29 Kommentare

  1. Toller Artikel, gerne würde ich ein ftp mounten, um dann das eigentliche Ziel, „incrementelle“ backups auf einem ftp endlich hinzubekommen. Ich benutze „keep“ („rdiff-backup“ als backend) und kann damit offensichtlich nur „eingebundene“ Verzeichnisse als Zielbackup nutzen.

    sshfs curlftpfs und fuse sind mit allen abhängigkeiten installiert.
    Zunächst habe ich die Gruppe „fuser“ hinzugefügt, vorher kann man keinen User einer Gruppe „fuser“ hinzufügen, da fehlte glaube ich etwas bei Deiner Beschreibung; dann habe ich User der Gruppe “fuse” hinzugefügt.

    Mit dem Befehl „chown User.User /mnt/mein_ftp“ bekomme ich die Fehlermeldung „invalid user;

    uranus:~ # chown User.User /mnt/mein_ftp
    chown: `User.User‘: invalid user
    uranus:~ #

    Gross-und Kleinschreibung wurde penibel beachtet, wie komme ich da weiter? Kannst Du mir helfen?

    Beste Grüsse, K.Winkler

  2. Habe noch eine Frage dazu …

    … bei Eingabe des Befehls „curlftpfs USERNAME:PASSWORT@beispiel.de /mnt/mein_ftp/“ bcomme ich die Fehlermeldung

    fuse: failed to open /dev/fuse: Is a directory

    Na Klar ist das ein directory, aber warum bindest Du Dich nicht ein?

    Was kann man tun?

  3. hi,

    interessanter ansatz! vorallem die tatsache, dass sich so backups direkt auf einem FTP realsieren lassen, ohne diese backups vorher lokal zu erstellen!

    ich habe die FTP ressourcen nach dem eintrag in “etc/fstab” erfolgreich mittels “# sudo /media/ftp-backup” mounten können und kann die verzeichnisstruktur einsehen… soweit so gut … doch wenn ich versuche, dort ein verzeichnis mittels “mkdir” zu erstellen, eine datei auf das neu eingebunden drive zu kopieren, oder eine datei zu löschen, bricht die verbindung ab…

    hast du eine idee, woran das liegen könnte?

    thx,
    swell

  4. @Karsten: Ähm, „User“ muss natürlich mit einem existierenden User auf dem System ersetzt werden 😉

    @swell: Fehlende Berechtigungen des FTP-Users? Normalerweise funzt das… aber wenn dein Linux ein Ubuntu ist, dann gibt es da momentan einen Bug in einer benötigten Bibliothek, die wiederum von der glibc abhängt usw. Wenn du also nicht in den Abhängigkeitswahnsinn einsteigen willst, gibt es da momentan keine einfache Lösung für. Das war für mich der Grund, auf Debian Sid umzusteigen um das zu realisieren.

    Gruß,
    Ingo

  5. Hi funktioniert sicher gut, aber ich habe einen Benutzernamen in dem ein @ vorkommt, also glaubt curlftpfs, der 2. Teil des Namens sei schon dem Hostname. Weißt du wie ich ein @ im Namen escapen kann?

  6. @Andi Einfach mal in die manpage von curlftpfs schauen. Dort findest du die Option „user“.

    Also: curftpfs -u „user=user@foo.com:pass“ /mnt/ftp

    Oder alternativ den Usernamen und Passwort in deine ~/.netrc eintragen (siehe „man netrc“).

  7. Schöner Artikel, erklärt das ganze ziemlich gut 😉

    Am Ende sprichst du von Shellscripts … ich wollt nur mal hinzufügen, dass es auch eleganter geht über die /etc/fstab. Kleines Beispiel für sftp:

    sshfs#alex@google.com:. /media/alexremote fuse user 0

    Damit können User das ganze über mount mounten:

    mount /media/alexremote

  8. Guter Artikel, aber jetzt habe ich doch gleich ein Problem: Was tute ich, wenn mein FTP Server den REST Befehl nicht unterstützt? Bei mir kachelt der Download ständig ab… wie kann ich die Verwendung von REST unterbinden?

  9. Erst mal… Super Artikel, das hab ich gesucht. Weiter so.
    Jetzt habe ich allerdings ein Problem mit der Rechtevergabe.
    Bei Arbeiten auf einen Webserver muß ich jedesmal die Rechte per chmod und chgrp erneuern da ja die Rechte des users mit dem ich mounte auf dem Remoteserver verwendet werden. Aus Sicherheitsgründen möchte ich natürlich die Rechte nur auf Userebene verwenden und keine weiteren Gruppen involvieren.
    Die sshfs Optionen -o gid und -o uid für User und Gruppe Apache beim Mounten zu setzen haben keinen Effekt.
    Unter Windows verwende ich Dreamweaver per SFTP zum komfortablen editieren der Files (Auch als Root). SSH und vi funzt zwar aber der Komfort…
    Hab ich jetzt irgendwas vergessen oder übersehen?

    1. Hi Tino, für deine Zwecke würde ich wahrscheinlich die Datei direkt im Editor öffnen mit dem richtigen User. Kate kann das, die meisten anderen auch. Das war später auch meine Lösung, weil ich auf zig Servern mit unterschiedlichen Nutzern agiere, und keine Lust hatte ständig neu zu mounten. Ich hoffe das hilft dir.

  10. Häufig wird SFTP und SSH + FTP verwechselt.

    Keines der Tools kann echtes SFTP, sondern nur SSH + FTP. Bei sshfs jedenfalls und curl scheint auch nur das Passwort mit „SSLv3 and TLSv1“ zu verschlüsseln.

    Also ist das Passwort verschlüsselt, die Daten selbst aber nicht.

  11. @chromax
    Hm?

    aus der Manpage von sshfs:


    The practical effect of this is that the end user can seamlessly interact with remote files being securely served over SSH just as if they were local files on his/her computer. On the remote computer the SFTP subsystem of SSH is used.

    Ergo: kein FTP over SSH, sondern richtiges SFTP

    aus der Manpage von curlftpfs:


    ssl
    Make curlftpfs use SSL/TLS for both control and data connections.
    sslv3
    Forces curlftpfs to use SSL version 3 when negotiating with a remote SSL server.
    ssl_control
    Make curlftpfs use SSL/TLS only for the control connection.
    ssl_try
    Curlftpfs will try to use SSL/TLS for both the control and data connections but if the server doesn’t support it, it will still connect unencrypted.

    Wie im Artikel beschrieben: es wird eine Verschlüsselung der Verbindung unterstützt, und zwar sowohl bei der Anmeldung als auch bei der Datenübertragung.

    Insofern: was genau wolltest du uns sagen?

  12. Also ich weiß nicht ??
    Funktioniert das curlftpfs bei euch tatsächlich ?
    Ich mounte es und sehe es zwar im Filesystem, bekomme aber immer wieder
    IO-Errors. Scheinbar ist das doch recht buggy ??

    lg aus Wien

  13. Pingback: Anonymous
  14. Hallo,

    das funzt super! in der Anleitung sind aber 2 Fehler:

    1.)

    diese zeile ist falsch:
    $ sudo chown USER.USER /mnt/mein_ftp
    richtig ist:
    $ sudo chown USER:USER /mnt/mein_ftp

    2.)

    dieser befehl ist auch noch nötig damit es funzt:
    $ sudo chmod o+rw /dev/fuse

    noch ein Tip:
    damit das auflisten schnell geht sollte beim mounten die option
    -o max_readahead=0
    angegeben werden

    PS:
    USER ist bei mir ubuntu

    mfg

  15. Hi,

    kann man mit dem Nachfolger Gigolo bzw. gVFS auch einen externen FTP-Server mounten und diesen Mountpoint dann über Samba sharen und in Windows als Laufwerksbuchstaben hinzufügen?

    MfG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert