sshfs
sshfs - FUSE-Modul zur Einbindung entfernter Verzeichnisse in das lokale Dateisystem
Beschreibung
Installation
Syntax
Optionen
Parameter
Umgebungsvariablen
Exit-Status
Anwendungen
Fehlerbehebung
Konfiguration
Dateien
Sicherheit
Siehe auch
Unterseiten
Dokumentation
RFC
Man-Pages
Info-Pages
Links
Einzelnachweise
Projekt
Weblinks
Testfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
TMP
Beschreibung
Entfernte Dateien und Verzeichnisse wie lokale bearbeiten
Anforderungen
- sftp-Server
- Hinweis
-
- Der einzige aktive Entwickler hat das Projekt am 26.05.2022 verlassen und die zugehörige [:Git:Github]-Seite gesperrt.
- Fehler und damit auch Sicherheitslücken werden nicht mehr beseitigt, dies sollte man bedenken falls sensible Daten per sshfs transportiert werden sollen.
- Siehe Ankündigung
- https://github.com/libfuse/sshfs
Installation
# apt install sshfs
- Vor dem Ausführen von sshfs
- FUSE muss eingerichtet sein
- Verzeichnis erstellen, in welches das entfernte Verzeichnis eingehangen werden soll
- Benutzer muss Mitglied der Gruppe fuse sein
Anwendungen
- Einhängen eines entfernten Verzeichnisses
$ mkdir ~/fusessh $ sshfs Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh
Falls ein Passwort für die Verbindung erforderlich ist, erscheint in der Konsole eine Abfrage.
- Aushängen eines entfernten Verzeichnisses
$ fusermount -u ~/fusessh
- Hinweis
-
- sshfs unterstützt Hardlinks nur ab OpenSSH-Server-Version 5.7 oder neuer.
- Bei älteren OpenSSH-Versionen ist es daher nicht möglich, sshfs für eine Datensicherung zu nutzen.
- Die OpenSSH-Version kann ermittelt werden indem man sich per ssh auf dem Server anmeldet und /usr/sbin/sshd -V eingibt.
Optionen
sshfs bietet eine Reihe von Optionen
- -p 222, falls der SSH-Server auf Port 222 lauschen sollte
User Mapping
Mit den Optionen `-o idmap=user -o uid=USERID -o gid=GROUPID` kann man "User Mapping" aktivieren.
- Dies ist hilfreich, falls die auf dem Server gespeicherten Dateien einen Eigentümer haben, der auf dem Client nicht vorhanden ist.
Dabei werden die entfernten Rechte auf die im Kommando angegebenen Werte übertragen.
$ sshfs Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh -o idmap=user -o uid=$(id -u) -o gid=$(id -g)
Der Befehl würde dem aktuellen Benutzer Eigentümer- und Gruppenrechte geben, gleich wie diese auf dem entfernten System gesetzt sind.
Symlinks
Möchte man im eigenen System auch den [:ln/#Symbolische-Verknuepfungen:Symbolische Verknüpfungen] (auch „Symlinks“ oder „Softlinks“ genannt), die auf dem entfernten Rechner gesetzt sind, folgen können, so gibt es hierfür die Option `follow_symlinks`, die folgendermaßen genutzt werden kann:
$ sshfs Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh -o follow_symlinks
Eine genaue Übersicht der Parameter kann man in der [:man:Manualseite] von sshfs nachlesen. Weitere Details finden sich ebenfalls unter [:Benutzer_und_Gruppen:], so wie [:Rechte:] hier im Wiki.
Automount
Falls man das Dateisystem automatisch beim Systemstart oder bei der Anmeldung einbinden lassen will, muss man die [:SSH#Authentifizierung-ueber-Public-Keys:SSH-Authentifizierung] über Public-Keys einrichten. Man ist nun nicht mehr gezwungen, das Server-Passwort einzutippen. Wichtig für das Einbinden ("mount") während des Systemstarts ist, dass sich die privaten Schlüssel ("private keys") im Root-Verzeichnis /root/.ssh/ befinden oder explizit über den Parameter -o IdentityFile=/Pfad/zum/publickkey/Schlüsseldateiname angegeben werden.
Systemstart
über die /etc/fstab
In der Datei /etc/fstab muss mit Root-Rechten [7] in einem Editor [4] eine Zeile hinzugefügt werden:
sshfs#Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh fuse uid=1003,gid=100,umask=0,allow_other,_netdev 0 0
Der Parameter `_netdev` ist wichtig, da das System sonst beim Booten nicht weiß, dass eine funktionierende Netzwerkverbindung zum Einbinden der Partition erforderlich ist.
Dispatcher
Man legt mit Root-Rechten [7] in einem Editor [4] eine Datei im Ordner /etc/NetworkManager/dispatcher.d/ an. Der Dateiname sollte mit einer Zahl beginnen, die die Startreihenfolge festlegt, wie beispielsweise 02sshfs. Nach der Erstellung des Skriptes muss dieses ausführbar gemacht werden[8].
Ein Beispielskript sieht z.B. so aus:
#!/bin/bash IFACE=$1 #wird vom NetworkManager übergeben BEFEHL=$2 #wird vom NetworkManager übergeben #SSHFS-Einstellungen PORT=22 #ssh-Port des Zielsystems PFAD="/Pfad/Zielordner" # ABSOLUTE PFADANGABE im lokalen System KEY="/home/user/.mykeys/my_rsakey" #eigener privater Schlüssel case "$BEFEHL" in up) #SSHFS-Verbindung herstellen #ACHTUNG: die Optionen sind Beispiele und haben keinen Anspruch auf allgemeine Gültigkeit! /usr/bin/sshfs -p$PORT user@server:relativer_pfad_auf_dem_server/ $PFAD -o uid=1000,gid=1000,nomap=ignore,allow_other,IdentityFile=$KEY ;; down) /bin/fusermount -u $PFAD ;; *) echo $"usage: $0 {up|down}" exit 1 esac
Weiterführende Informationen zu Dispatcher-Skripten gibt es unter [:NetworkManager/Dispatcher:].
- Hinweis
- Es besteht die Möglichkeit, ein sshfs-mount ebenfalls über die [:interfaces#Start-Stop-Skripte:/etc/network/interfaces] einzubinden, bei Verwendung des [:NetworkManager: Network Managers] (NM) sollte von einer Bearbeitung der /etc/network/interfaces aber abgesehen werden!
Nach der Anmeldung eines Anwenders
Den sshfs-Befehl
- Befehl
sshfs Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh
muss man dazu bei jeder Anmeldung automatisch ausführen lassen [5].