Toolbox: Dateizugriffe mit sshfs

Mit SSH lassen sich nicht nur entfernte Server administrieren: sshfs nutzt das SSH-Protokoll für den unkomplizierten Dateiaustausch.

In Pocket speichern vorlesen Druckansicht 63 Kommentare lesen
Lesezeit: 7 Min.
Von
  • David Wolski
Inhaltsverzeichnis

Das SSH-Protokoll (Secure Shell) ist eine feste Größe unter Linux und Unix-Betriebssystemen. Mit dem Remote-Shell-Programm ssh lassen sich Befehle auf entfernten Systemen ausführen. Außerdem eignet es sich dazu, sichere Tunnels zu entfernten Systemen aufzubauen und Dateien verschlüsselt zu übertragen. Das Kommando scp überträgt eine einzelne Datei auf einen anderen Rechner, sftp erlaubt in Art einen ftp-Clients die Navigation durch dessen Dateisystem. Auf dem entfernten Rechner muss dazu lediglich ein SSH-Server laufen.

Mit Hilfe von Fuse (Filesystem in Userspace) kann SSH aber noch mehr: Mit dem Kernel-Modul Fuse und SSH lassen sich entfernte Verzeichnisse ins lokale System einhängen, sodass lokale Anwendungen einfach über das Dateisystem auf die entfernten Dateien zugreifen können. Diese Lösung nennt sich sshfs und ist für den Dateiaustausch zwischen Linux-Rechnern eine unkomplizierte Alternative zu NFS oder Samba.

Komfortabler Fernzugriff mit sshfs (7 Bilder)

SSH-Verbindung im Dateimanager

Mit Fuse hängt sshfs die Verzeichnisse des entfernten Systems via SSH-Verbindung in den lokalen Dateisystembaum ein.

Root-Privilegien sind zum Einhängen der entfernten Dateisysteme nicht nötig. Die Kombination aus Fuse und sshfs ist allerdings unter anderem durch den Overhead der SSH-Verbindung nicht gerade schnell. Für die Arbeit mit Dateien bis zu mehreren Megabyte Größe fällt dies kaum ins Gewicht. Bei richtig großen Brocken eignet sich eine Lösung wie NFS oder Samba im lokalen Netzwerk besser.

Installation von sshfs und allen benötigten Paketen unter Debian.

Handelt es sich beim entfernten System um ein Linux-Server, läuft meist sowieso schon ein SSH-Server. Andernfalls lässt sich dieser über die distributionseigene Softwareverwaltung installieren. Auf dem lokalen System genügen ein SSH-Client wie OpenSSH sowie das Kernel-Modul Fuse, das mit der Erweiterung sshfs die Verbindung auf Dateisystemebene herstellt.

Fuse ist ein fester Bestandteil der Kernel aller größeren Distributionen wie Debian GNU/Linux, Fedora, OpenSuse, Ubuntu. sshfs gibt es als fertiges Paket, das sich einfach über den jeweiligen Paketmanager der Distribution nachinstallieren lässt. Bei den meisten aktuellen Distributionsversionen, etwa Fedora 17 oder Ubuntu 12.04, ist damit bereits alles erledigt.

Bei Debian 6 müssen noch alle Benutzer, die Fuse verwenden wollen, der Gruppe "fuse" hinzugefügt werden. Welchen Gruppen der aktuelle Benutzer angehört, zeigt der Befehl groups in einem Terminal. Fehlt hier noch die Gruppe "fuse", lässt sich der Benutzer mit dem folgenden Kommando, eingegeben mit root-Rechten oder vorangestelltem sudo, hinzufügen:

usermod -a USERNAME -G fuse

Die neue Gruppenmitgliedschaft ist unter Linux allerdings erst nach dem erneuten Anmelden wirksam.

Wenn Fuse und sshfs auf dem Client eingerichtet sind, lässt sich das Dateisystem des gewünschten Servers via SSH-Verbindung einhängen. Die Verbindungsaufnahme erfolgt in einem Terminal. sshfs folgt hier dem Schema des mount-Befehls "was, wohin, wie". Um beispielsweise via SSH das Verzeichnis /home/USERNAME auf dem Rechner mit der IP-Adresse 192.168.1.1 in das lokale Verzeichnis srv im eigenen Home-Verzeichnis einzuhängen, dient der Befehl

sshfs USERNAME@192.168.1.1:/home/USERNAME ~/srv/

Der Platzhalter USERNAME steht für das Benutzerkonto auf dem Server. sshfs verlangt nun das SSH-Passwort für diesen Account (sofern nicht Key Authentication eingerichtet ist, dazu gleich mehr) und zeigt dann den Inhalt des entfernten Verzeichnisses im lokalen Dateisystembaum an. Klappt die Verbindung nicht, sind meist Berechtigungsprobleme in Verbindung mit Fuse auf dem lokalen Client die Ursache. Bei der Fehlersuche hilft der Parameter -d, der sshfs im Debug-Modus detaillierte Meldungen entlockt.

Die bestehenden Fuse-Dateisysteme und damit auch die sshfs-Verbindungen zeigt der Befehl mount an. Alle Optionen von sshfs listet das Kommando sshfs -h auf. Wenn auf dem Server beispielsweise Symlinks im eingehängten Verzeichnis liegen und diese auch auf dem Client funktionieren sollen, dann ist der Parameter

-o follow_symlinks 

nötig.

Zum späteren Beenden der SSH-Verbindung liefert Fuse das Tool fusermount mit. Für das Beispiel lautet der Befehl zum Aushängen dann

fusermount -u ~/srv/

Für oft gebrauchte SSH-Verbindungen ist eine Authentifizierung mit dem Public-Key-Verfahren praktisch, da der Server in diesem Fall nicht nach einem Passwort fragt. Stattdessen sendet der Client seinen Public Key an den SSH-Server authentifiziert sich der Client ohne Passwort-Eingabe mit einer Signatur, die er mit seinem privatem Schlüssel erzeugt und die der Server anhand des dort gespeicherten öffentlichen Teil des Schlüsselpaars verifiziert.

Die Einrichtung ist nicht nicht weiter kompliziert: Der Befehl ssh-keygen erzeugt, falls noch nicht vorhanden, für den aktuellen Benutzer ein neues Schlüsselpaar für SSH. Das optionale Passwort sollte man leer lassen, falls man, wie im Folgenden beschrieben, die Verbindung automatisch herstellen will. Anschließend liegen im (versteckten) Verzeichnis ~/.ssh die Dateien id_rsa und id_rsa.pub. Die erste Datei enthält den privaten Schlüssel darf den PC nicht verlassen. Den öffentlichen Schlüssel aus der Datei id_rsa.pub hingegen muss auch das entfernte System kennen, damit die Anmeldung ohne Passwort klappt.

Dazu muss der Inhalt dieser Datei in die Datei ~/.ssh/authorized_keys auf dem entfernten Rechner kopiert werden. Das ist weniger Aufwand, als es scheint, denn ein einziger Befehl erledigt die Schlüssel-Übermittlung und schreibt den Public Key des Clients in die Konfigurationsdatei auf dem entfernten System:

cat ~/.ssh/id_rsa.pub | ssh USERNAME@192.168.1.1 'cat >>~/.ssh/authorized_keys'

Das Verzeichnis .ssh auf dem entfernten Rechner muss dazu schon existieren. Dabei muss man ein letztes Mal sein Passwort auf der entfernten Maschine eintippen.

Ist die Anmeldung ohne Passwort eingerichtet, lassen sich entfernte Laufwerke mit häufig benötigten Dateien auch automatisch einbinden. Die Dateien auf dem entfernten Rechner stehen dann gleich nach dem Anmelden zur Verfügung. Der Weg über die /etc/fstab ist für Fuse-Laufwerke unnötig kompliziert, besser ist es, das automatische Einhängen über die Session-Verwaltung der Desktop-Umgebung zu erledigen, die den Befehl bei jedem Anmelden automatisch ausführt.

Zunächst muss man mit einem Editor ein kleines Skript (beispielsweise mit dem Namen sshfs.sh im Home-Verzeichnis) mit den folgenden beiden Zeilen anlegen:

#!/bin/bash
sshfs USERNAME@192.168.1.1:/home/USERNAME ~/srv/

und dieses anschließend ausführbar machen – entweder über den Eigenschaftendialog des Dateimanagers oder mit dem Befehl

chmod +x script.sh

Bei Gnome und Unity ruft der Befehl gnome-session-properties die Session-Verwaltung ("Startprogramme") auf. Mit dem Button "Hinzufügen" lässt sich ein neuer Eintrag anlegen. Als Befehl verwendet man den Aufruf des Skripts samt Pfad:

sh /home/USERNAME/script.sh

Auch KDE und Xfce bieten ähnliche Einstellungsdialoge für die Session-Verwaltung. Wirklich geeignet ist dieser Automatik allerdings nur bei kabelgebundenen, permanent verfügbaren Netzwerkverbindungen. Andernfalls ist der manuelle Verbindungsaufbau sinnvoller.

Sshfs ist eine ideale Lösung für den schnellen und bequemen Dateiaustausch zwischen Linux-Systemen: Sowohl Fuse als auch sshfs sind ausgereift, die großen Distributionen bringen alle benötigten Pakete mit und der Aufwand für Installation und Konfiguration ist gering. (lmd)