cmllr.eu

Pinguinhaltiges Geschwafel seit 2012.

FreeBSD: SSHFS benutzen

Ich benutze unter Linux oft gvfs-mount zum Einhängen entfernter SFTP-Verzeichnisbäume. Ich selbst habe dieses unter FreeBSD nicht zum laufen bewegen können. Daher habe ich mich nach Alternativen umgesehen und bin auf sshfs gestossen, dass im Endeffekt das Gleiche wie gvfs-mount tut (im Hintergrund ist das Ganze natürlich etwas anders).

Am Anfang gibt es ein paar mögliche Fehler, die ich lange Recherchieren musste. Ich sammle hier einige Fehler und deren Lösungen, die auf meinem nahezu frisch installierten FreeBSD 10.3 aufgetreten sind. Vielleicht erspart das dem ein oder anderen ellenlanges Recherchieren.

Vorweg: Ich habe sshfs über pkg als Binärpakete installiert, nicht über den Ports-Tree. In meiner /etc/sysctl.conf steht zusätzlich noch ein vfs.usermount=1, damit „normale“ Benutzer auch mounten können.

Folgende Pakete sind installiert:

# pkg info  | grep fuse
fusefs-libs-2.9.5              FUSE allows filesystem implementation in userspace
fusefs-sshfs-2.7               Mount remote directories over ssh

sshfs funktioniert im Grunde ganz einfach. Man hängt den entfernten Baum in einem Verzeichnis (aka Mountpoint) ein, z. B. in (das man zuvor selbst anlegt). Anschliessend kann man mitsshfs user@server:/path/ das Verzeichnis anhängen. Mit mount kann man nachgucken, ob der Baum noch eingehängt ist und umount /dev/fuse kann man den Baum dann auch aushängen.
Es gibt zum Aushängen des Baums (zumindest unter Linux) wohl auch ein fusermount -u , dass ich aber inpkg` nicht finden konnte.

Fehler: Prozess kann das FUSE-Device nicht finden

Das liegt daran, dass die Device-Datei /dev/fuse über das Kernelmodul fuse erzeugt bzw. verwaltet wird. Daher muss man es mit kldload fuse laden. Mit kldstat kann man prüfen, ob es auch wirklich geladen wurde.

# kldstat 
Id Refs Address            Size     Name
 1    3 0xffffffff80200000 17bc680  kernel
# kldload fuse
# kldstat
 1    3 0xffffffff80200000 17bc680  kernel
 2    1 0xffffffff81a11000 df9a     fuse.ko

Damit man das nicht jedes Mal tun muss, kann man fuse_load="YES" in die Datei /boot/loader.conf eintragen. Dann wird das Modul beim Booten automatisch mitgeladen.

Fehler: Prozess kann das FUSE-Device nicht benutzen

Fehlermeldung: unable to open FUSE device: Permission denied

Per Default sind die Berechtigungen auf dem Device /dev/fuse auf root:operator. Ist der Benutzer nicht in der Gruppe drin, kann er folglich auch nicht darauf zugreifen.

user@boexli [13:53:31] [ 
-> % ls -la /dev/fuse*
crw-rw----  1 root  operator  0x55 Sep 22 13:50 /dev/fuse

# pw usermod user -G operator

Nachdem der Benutzer sich einmal wieder neu angemeldet hat, sollte der Fehler nicht mehr auftreten.

Problem: Symlinks sind kaputt

Wenn man einen entfernten Server ohne Optionen einbindet, sind die Symlinks kaputt (File not found). Das kann man recht leicht beheben, indem man den Parameter -o follow_symlinks sshfs mitgibt. Dann funktionieren auch Symlinks. Ursprünglich war die Option mal transform_symlinks, funktioniert aber schon seit ca. 2011 so nicht mehr.

Der volle Befehl lautet dann `sshfs -o follow_symlinks user@server:/dir/ .


FreeBSD Logo: https://www.freebsd.org/de/logo.html