Wie man Automount und sshfs (osxfuse) mit Yosemite zum Laufen bringt

Ich versuche derzeit, Apples Automount mit osxfuse und sshfs zum Laufen zu bringen. Das Ergebnis sollte sein, dass ein bestimmter Ordner automatisch gemountet wird, wenn er verwendet wird.

Was ich bisher gemacht habe:

  • installiertes osxfuse und sshfs aus den offiziellen Paketen (Versionen sind osxfuse: 2.7.3 / sshfs 2.5.0)
  • einen Symlink erstellt/sbin/mount_sshfs -> /usr/local/bin/sshfs
  • folgende Konfigurationszeile an /etc/auto_master angehängt:/- auto_ssh -nosuid
  • erstellte die Konfigurationsdatei /etc/auto_ssh:

    /mnt -fstype=sshfs,sshfs_debug,allow_other,idmap=user,follow_symlinks,max_read=65536,rw,nodev,cache=no,IdentityFile=/Users/myUsername/.ssh/sshfs remoteUser@remoteHost:/path/to/folder
    
  • danach automount neu laden über :sudo automount -cv

Wenn ich das jetzt versuche cdbekomme mntich folgende Fehlermeldung:

bash: cd: /mnt: Operation not permitted

Die Konsole enthält Folgendes:

04/12/14 01:27:50,418 automountd[1965]: MOUNT  REQUEST: name=/mnt [] map=auto_ssh opts=nosuid path=/mnt direct=1
04/12/14 01:27:50,631 KernelEventAgent[69]: tid 54485244 received event(s) VQ_DEAD (32)
04/12/14 01:27:50,632 automountd[1965]: MOUNT  REPLY  : status=1, AUTOFS_DONE
04/12/14 01:27:50,632 automountd[1965]: mount of /mnt failed: Operation not permitted

Hat jemand eine Idee, wie man das hinbekommt oder was man als nächstes versuchen könnte?

Antworten (5)

FWIW, falls noch jemand über diese alte Frage stolpert, die beste Anleitung, die ich zum Mounten von sshfs mit Apples Automounter gefunden habe, ist hier -

http://virtuallyhyper.com/2013/07/mount-various-file-system-with-autofs-on-mac-os-x-mountain-lion/#mount-sshfs-with-autofs

Dies erfordert kein Deaktivieren des Systemintegritätsschutzes, da Cron-Jobs immer noch in El Captain funktionieren:

$ crontab -e

*/5 * * * *  /usr/local/bin/sshfs 192.168.1.2:/etc /Users/xxx/temp/etc -o uid=$(id -u) -o gid=$(id -g) -o reconnect
Ist Ihre Antwort, den Systemintegritätsschutz zu deaktivieren, oder ist dies eine neue Frage?
Dies ist nur eine weitere Möglichkeit, ein Automount-Verhalten zu erreichen. Dies funktioniert, ohne SIP zu deaktivieren.
Ok, nur zur Klarstellung. Ich habe Ihre Antwort bearbeitet, um sie klarer zu machen.
Wenn das Volume bereits gemountet ist, wird ein Fehler ausgegeben mount_osxfusefs: mount point /Users/xxx/temp/etc is itself on a OSXFUSE volume. Gibt es eine Möglichkeit, den Befehl nur auszuführen, wenn er nicht gemountet ist?
@SaaruLindestøkke Sie können ein einfaches Bash-Skript im Cron-Tab ausführen (Beispiel ist für die Passwortverbindung, aber Sie sollten die Idee verstehen) #!/bin/bash umount /Users/shuib/Documents/mountFolder echo "yourSSHpassword" | sshfs toho@drasha.site:/home/toho/draSha/Users/shuib/Documents/mountFolder -o password_stdin

Für macOS Mojave und die neueste Version von osxfuse ist dies die richtige Daemon-Datei:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>sysctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse; /usr/sbin/sysctl -w vfs.generic.osxfuse.tunables.allow_other=1</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

load_osxfusebefindet sich nun unter /Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuseund der richtige Kernel-Parameter istvfs.generic.osxfuse.tunables.allow_other

Weitere Informationen im osxfuse-Wiki

Update 03.08.2016: Ich habe festgestellt, dass die Installation von SSHFS von https://osxfuse.github.io aufgrund einiger alter Abhängigkeiten stabiler ist als die Homebrew-Version (daher kann sich dies in Zukunft verbessern).

VORBEHALT: Diese Verbindung ist superschnell, wenn sie funktioniert, hat aber oft Probleme nach Verbindungsabbruch aufgrund von z. B. WLAN, Standby.


Angenommen, Sie haben Homebrew installiert ( erleichtern Sie sich das Leben und holen Sie sich dies zuerst )

Installation von SSHFS

brew install sshfs

Überprüfen Sie diesen Ordner, um installierte Dateisysteme anzuzeigen: ls /Library/FilesystemsWenn Sie nicht sehen osxfusefs.fs, müssen Sie es installieren.

Fass bekommen

brew tap caskroom/cask

Installieren Sie OSXFUSE

brew cask install osxfuse

Alternativ statt Homebrew die Download-Versionen von https://osxfuse.github.io/ verwenden

SSHFS + OSXFUSE jetzt installiert. Noch ein Schritt...

autofsbraucht mount_*Binärdateien.

/usr/local/bin/sshfssollte auch als verfügbar sein mount_sshfs, also:

Listen Sie Ihre mount_*s mit auf

compgen -c | grep ^mount

ODER

ls /sbin | grep mount 

Wenn Sie mount_sshfs nicht sehen, müssen Sie diesen Schritt ausführen. Dies ist ein kritischer Schritt, da er leicht vergessen wird und Kopfschmerzen verursachen kann. Wie /sbinauf der Systempartition müssen Sie SIP deaktivieren und die Partition mit dem beschreibbaren Attribut neu einhängen .

Öffnen Sie im Wiederherstellungsmodus das Terminal, schalten Sie SIP aus und starten Sie neu:

csrutil disable
reboot

Stellen Sie nach dem Neustart das Systemvolume erneut bereit:

sudo mount -uw /

Jetzt können Sie den richtigen Symlink erstellen:

sudo ln -s $(which sshfs) /sbin/mount_sshfs

Fügen Sie Autostart bei Boot Daemon hinzu/Library/LaunchDaemons/

Datei könnte aufgerufen werden:

Sie müssen dies bei jedem Start für die Kernel-Erweiterung ausführen:

/bin/bash -c "/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse; /usr/sbin/sysctl -w vfs.generic.osxfuse.tunables.allow_other=1"

Erstellen Sie also eine neue Servicedatei:

/Library/LaunchDaemons/load.osxfusefs.tunables.plist

Inhalt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>sysctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse; /usr/sbin/sysctl -w vfs.generic.osxfuse.tunables.allow_other=1</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Laden Sie mit launchctl(launchd) für den nächsten Start, was die Mac OS X-Version von systemctl(systemd) ist

launchctl load /Library/LaunchDaemons/load.osxfusefs.tunables.plist

Richten Sie auto_master und auto_sshfs ein

Im Folgenden wird davon ausgegangen, dass Sie mit einem sicheren Schlüssel (kein Kennwort erforderlich) auf Ihren Server zugreifen können.

##/etc/auto_master

/mnt/sshfs                auto_sshfs       -nosuid

##/etc/auto_sshfs Abhängig von Ihrer Situation können Sie Parameter verwenden, die normalerweise nach dem -oin kommen .sshfs -o

  • idmap=Benutzer: Standardeinstellung. Da Ihre uid und gid wahrscheinlich je nach Betriebssystem unterschiedlich sind, könnten Sie den in user@ip: verwendeten Benutzer einfach Ihrem lokalen (Client-)Benutzer zuordnen. Die Gruppe wird in diesem Fall ignoriert.

ODER

  • uid=YOURUSERID, gid=YOURGROUPID: Geben Sie einfach id YOURUSER ein, um die Nummern zu erhalten. Dadurch werden einfach alle Dateien vom Mount dieser Benutzer/Gruppen-Kombination zugeordnet. Dadurch können Sie alle Dateien lesen. Ich denke, dass alle neuen Dateien/Ordner, die Sie erstellen, die Standard-Umask-Einstellungen für den Ordner erben, den Sie einhängen.

  • allow-other: Ich verwende dies, aber es ist riskant, da jeder Benutzer, der den Mount durchsucht, den Mount mit den Anmeldeinformationen anzeigt, die beim Herstellen der Verbindung verwendet werden.

  • listet alle Parameter mit auf man sshfsund lest jeden Parameter nach jedem-o

ersetzen:

  • YOURUSER mit Ihrem Benutzernamen und
  • PRIVATEKEY zu Ihrem Schlüssel zB id_ed25519
  • ip mit Ihrer IP-Adresse oder Ihrem Hostnamen

Inhalt Wichtig ist der Parameter reconnect, sonst stürzt der Finder ab, wenn Sie die Verbindung verlieren (z. B. schlafen gehen).

Ersetzen

  • $(id -u) mit Ihrer tatsächlichen ID auf dem Client-Rechner
  • $(id -g) mit Ihrer tatsächlichen Gruppen-ID auf dem Client-Rechner

Leider können Sie in Autofs keine Dinge wie ausführenid -u

NameOfMountThatGetsIgnored -fstype=sshfs,port=22,reconnect,uid=$(id -u),gid=$(id -g),follow_symlinks,allow_other,IdentityFile=/Users/YOURUSER/.ssh/PRIVATEKEY,volname="NameOfMount"     YOURUSER@ip:/path/on/server

Prüfen

df -Ph /path/to/mount

Eingehängte Dateisysteme auflisten

lsvfs

Alle Reittiere auflisten

mount
Ich habe versucht, dies zum Laufen zu bringen, aber es scheint, als würden einige kürzliche Änderungen in macOS es schwieriger machen, als es sein sollte. Es ist nicht möglich, sshfs in /usr/sbin/mount_sshfs zu symbolisieren. Eventuell ein Problem mit SIP? Du kennst nicht zufällig einen Workaround, oder? (Ich würde SIP lieber nicht deaktivieren, um die Änderung vorzunehmen, aber ich werde es tun, wenn ich muss; gibt es eine Möglichkeit, /usr/local/sbin/mount_sshfs zum Laufen zu bringen?)

Ich habe alle Automount-Anleitungen durchgesehen, die ich finden konnte, und die Schritte aus dieser Antwort erfolgreich abgeschlossen, aber am Ende habe ich einen hängenden Finder bekommen und konnte nicht über das Terminal aushängen.

Daher möchte ich eine alternative, weniger aufdringliche Option erwähnen: Folder Actions .

In der Vergangenheit waren diese unzuverlässig, daher kann Ihre Laufleistung variieren, aber für mich (auf Catalina) funktionieren sie bisher zuverlässig (1 Tag später).

  1. Öffnen Sie den Skript-Editor.
  2. Erstellen Sie ein Skript mit folgendem Inhalt:
on opening folder this_folder
    do shell script "/usr/local/bin/sshfs user@ipaddress:remote_path ~/mnt/volume_name -o volname=desired_volume_name"
end opening folder
  1. Kompilieren Sie dieses Skript im Skripteditor (mithilfe des Symbols 🔨)
  2. Speichern Sie diese Datei ~/Library/Scripts/Folder Action Scripts/unter einem beliebigen Namen, der Ihrer Meinung nach aussagekräftig ist.
  3. Wechseln Sie zum übergeordneten Ordner, der das bereitgestellte Volume enthalten wird. Im obigen Beispiel ist das ~/mnt.
  4. Klicken Sie mit der rechten Maustaste auf ~/mnt, gehen Sie zu DiensteEinrichtung von Ordneraktionen …Dienst ausführen und:
    • Ordneraktionen aktivieren
    • Klicken Sie auf das ➕-Zeichen im rechten Bereich und fügen Sie das Skript aus Schritt 4 hinzu

~/mntJetzt versucht der Befehl jedes Mal, wenn Sie den Ordner öffnen , sshfsdas Remote-Volume unter einzuhängen ~/mnt/desired_volume_name.