Sshfs: Unterschied zwischen den Versionen

Aus Foxwiki
Subpages:
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{DISPLAYTITLE:sshfs}}
{{DISPLAYTITLE:sshfs}}
'''topic''' kurze Beschreibung
'''sshfs''' - [[FUSE]]-Modul zur Einbindung entfernter Verzeichnisse in das lokale Dateisystem


== Beschreibung ==
== Beschreibung ==
Der Vorteil gegenüber einer ssh-Shell ist, dass man damit die Dateien und Verzeichnisse auf dem entfernten Rechner sehr komfortabel editieren, kopieren oder verschieben kann – genau wie die Dateien und Verzeichnisse auf den lokalen Festplatten.
Dateien und Verzeichnisse wie die Dateien und Verzeichnisse auf den lokalen Festplatten bearbeiten
 
* Erfordert auf dem Server ein [[sftp]]-Programm
Dies erfordert auf dem Server ein sftp-Programm.
* Das ist bei den meisten SSH-Servern, wie OpenSSH, standardmäßig dabei, aber auf einigen embedded Geräten, wie OpenWRT, sind dafür spezielle Programm-Pakete notwendig.
 
Das ist bei den meisten SSH-Servern, wie OpenSSH, standardmäßig dabei, aber auf einigen embedded Geräten, wie OpenWRT, sind dafür spezielle Programm-Pakete notwendig.


; Hinweis
; Hinweis
Zeile 39: Zeile 37:


=== Optionen ===
=== Optionen ===
sshfs bietet eine Reihe von Optionen, wie z.B. `-p 222`, falls der [:SSH:SSH-Server] auf Port 222 lauschen sollte.\\
sshfs bietet eine Reihe von Optionen
* -p 222, falls der SSH-Server auf Port 222 lauschen sollte


==== User Mapping ====
==== 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. Beispiel:
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.  


; Befehl
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)
  $ '''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.
Der Befehl würde dem aktuellen Benutzer Eigentümer- und Gruppenrechte geben, gleich wie diese auf dem entfernten System gesetzt sind.


==== Symlinks mit einbeziehen ====
==== 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:
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'''
; Befehl
  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.
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.

Version vom 22. Januar 2023, 12:12 Uhr

sshfs - FUSE-Modul zur Einbindung entfernter Verzeichnisse in das lokale Dateisystem

Beschreibung

Dateien und Verzeichnisse wie die Dateien und Verzeichnisse auf den lokalen Festplatten bearbeiten

  • Erfordert auf dem Server ein sftp-Programm
  • Das ist bei den meisten SSH-Servern, wie OpenSSH, standardmäßig dabei, aber auf einigen embedded Geräten, wie OpenWRT, sind dafür spezielle Programm-Pakete notwendig.
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

Anwendungen

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
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.

Beim 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.

per 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].

sshfs hängt sich auf - timeout

Warnung
Es kann vorkommen, dass sich die Verbindung mit sshfs nach einer Weile aufhängt und nicht mehr reagiert, obwohl das Einbinden geklappt hatte und man auch auf die Dateien und Ordner auf dem anderen Rechner zugreifen konnte.

Laut FUSEWiki {en} gibt es dafür zwei Lösungsansätze:

1) In der Datei .ssh/config folgende Zeile hinzufügen (liegt im Homeverzeichnis des Anwenders, bzw. wenn man Automount beim Systemstart macht, ist die Datei /root/.ssh/config zu ändern):

ServerAliveInterval 15

Falls die Datei config nicht existiert, wird sie neu angelegt.

2) Oder man fügt beim oben stehenden sshfs-Befehl die Option `-o ServerAliveInterval=15` ein. Dieser Lösungsansatz wurde zwar nicht laut FUSEWiki {en} getestet, aber sollte theoretisch auch funktionieren.

Befehl
sshfs -o ServerAliveInterval=15 Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh

Diese sollte die ssh-Verbindung aufrechterhalten, auch wenn über einen längeren Zeitraum keine Aktivitäten stattfinden.

Fehlerbehebung

Syntax

Optionen

Parameter

Umgebungsvariablen

Exit-Status

Konfiguration

Dateien

Sicherheit

Dokumentation

RFC

Man-Pages

Info-Pages

Siehe auch

Links

Projekt-Homepage

Weblinks

  1. https://wiki.ubuntuusers.de/FUSE/sshfs/
  2. https://wiki.archlinux.org/index.php/SSHFS

Einzelnachweise

Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5