Mounten Sie ein sshfs über macfuse beim Booten

Ich möchte einen sshfs-Ordner beim Booten unter Mac OSX mounten: Ich verwende gerade Macfusion, das ist eine GUI für MacFUSE, aber ich muss den Ordner manuell mounten.

Wie kann ich das erreichen?

Author: studiohack, 2010-04-23

3 answers

Wenn Sie einen Remotecomputer verwalten, kann es sehr nützlich sein, das Dateisystem dieses Computers lokal zu mounten, um Dateien zu verschieben. MacFUSE und sshfs machen dies sehr einfach, obwohl es beim Anmelden etwas schwierig sein kann, es automatisch einzurichten und zu mounten.

Stellen Sie zunächst sicher, dass Sie ssh auf Ihrem Remote-Computer ausführen können, ohne ein Kennwort einzugeben. Führen Sie das Setup in durch und unterstützen Sie ssh-agent bei der Anmeldung und stellen Sie sicher, dass es funktioniert:

ssh USER@HOSTNAME:

Wenn es dich ohne angemeldet hat wenn Sie nach einem Passwort oder Passkey fragen, können Sie fortfahren.

Als nächstes installieren Sie sshfs und MacFUSE gemäß Installieren Sie sshfs 1.9 mit MacFUSE 1.7 unter OS X Leopard 10.5.5.

Finden Sie heraus, wo Sie Ihr Remote-Volume mounten möchten. Ich würde nicht empfehlen, /Volumes da es scheint, dass OS X Verzeichnisse dort automatisch löscht, wenn Sie Dinge aushängen. Also habe ich stattdessen /mnt/HOSTNAME

mkdir -p /mnt/HOSTNAME

(Offensichtlich werden Sie ersetzen HOSTNAME mit Ihrer Fernbedienung name des Servers.)

Stellen Sie dann sicher, dass Sie Ihre Remote-Site als Volume mounten können, ohne ein Kennwort mit sshfs anzugeben:

sshfs USER@HOSTNAME:PATH /mnt/HOSTNAME -oreconnect,allow_other,volname=VOLUME_NAME

Legen Sie VOLUME_NAME auf das fest, wonach Ihr Volume im Finder benannt werden soll. Ich habe HOSTNAME verwendet. PFAD ist optional; Legen Sie es auf das Verzeichnis fest, das Sie auf dem Remote-Host mounten möchten. Wenn es nicht festgelegt ist, wird Ihr Home-Verzeichnis verwendet.

Wenn Sie keine Fehlermeldungen erhalten, und wenn Sie ein ls /mnt/HOSTNAME die Remote-Dateien werden angezeigt, dann sind Sie bereit fahren Sie mit dem nächsten Schritt fort.

Das gerade gemountete Volume aushängen:

umount /mnt/HOSTNAME

Jetzt kommt die knifflige Party. Sie müssen ein LaunchAgent-Element erstellen, um Ihr Volume bei der Anmeldung bereitzustellen. Dies an sich ist ziemlich einfach. Wenn Ihr System jedoch so etwas wie Meins ist, ist für dieses Element SSH_AUTH_SOCK nicht richtig eingestellt, sodass es sich nicht ohne Kennwort beim Remote-Host anmelden kann. Sie müssen den SSH_AUTH_SOCK manuell selbst festlegen.

Erstellen Sie zuerst einen Wrapper um sshfs herum wird der SSH_AUTH_SOCK für Sie festgelegt. Legen Sie dies in eine Datei, wo immer Sie wollen.  Ich schlage vor /opt/local/bin/sshfs-authsock.

#!/bin/bash
export SSH_AUTH_SOCK=$(ls -t /tmp/launch-*/Listeners | head -1)
/opt/local/bin/sshfs $*

Grundsätzlich setzt diese Datei SSH_AUTH_SOCK auf den neuesten Socket in Ihrem tmp-Verzeichnis.  In den meisten Fällen sollte dies der richtige sein. Es ist unwahrscheinlich, dass es fehlschlägt, und wenn ja, gibt es kein Sicherheitsproblem.

Jetzt können Sie endlich die launchd plist-Datei erstellen. Setzen Sie dies in

~/Library/LaunchAgents/BACKWARDS_HOST_DNS.PATH.sshfs.plist

(Wenn der Pfad Ihres Hosts beispielsweise foo.niskala.org und Ihr PFAD /tmp war, dann ihr resultierender Dateiname wäre org.niskala.foo.tmp.sshfs.plist.  Dies ist nur eine Konvention, fühlen Sie sich frei, die Datei zu benennen, was Sie wollen, wirklich; aber es muss in .plist enden.)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>BACKWARDS_HOST_DNS.PATH.sshfs</string>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/local/bin/sshfs-authsock</string>
                <string>USER@HOSTNAME:</string>
                <string>/mnt/HOSTNAME</string>
                <string>-oreconnect,allow_other,volname=VOLUME_NAME</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

Laden Sie nun die Plist-Datei und führen Sie sie aus, um zu sehen, ob sie funktioniert.

launchctl load ~/Library/LaunchAgents/BACKWARDS_HOST_DNS.PATH.sshfs
launchctl start BACKWARDS_HOST_DNS.PATH.sshfs

Wenn keine Fehlermeldungen angezeigt werden, prüfen Sie, ob das Volume ordnungsgemäß gemountet wurde:

ls /mnt/HOSTNAME

Wenn Ihre Remote-Dateien angezeigt werden, dann großartig! Du bist fertig!

Wenn nicht, verwenden Sie

launchctl unload ~/Library/LaunchAgents/BACKWARDS_HOST_DNS.PATH.sshfs

Um die Datei vor Änderungen zu entladen, verwenden Sie ps auxwww | grep sshfs und kill, um alle sshfs Prozesse zu finden und zu töten, bevor Sie es erneut versuchen.

Referenzen:

 7
Author: dag729,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-10-06 03:31:34

Ich möchte die großartige Antwort von dag729 aktualisieren. Auf El Captain OS X mit dem OS X Fuse 2.8.3 sind die Dinge etwas anders:

  1. Einige Pfade werden geändert
  2. osxfuse muss gezwungen sein, im Vordergrundmodus mit der Option -f
  3. SSH_AUTH_SOCK ist bereits definiert, sodass es keinen Grund mehr gibt, das Skript sshfs-authsock zu erstellen

Außerdem würde ich empfehlen, die Option allow_other (aus Sicherheitsgründen) nicht zu verwenden und die Option auto_cache nur zu verwenden, weil sie nützlich klingt. Bitte überprüfen Sie OS X Fuse mount options für Details.

Hier ist die ~/Library/LaunchAgents/NAME.sshfs.plist Datei, die ich verwende:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>NAME.sshfs</string>
    <key>ProgramArguments</key>
    <array>
            <string>/usr/local/bin/sshfs</string>
            <string>[USER@]HOST:REMOTE_DIR</string>
            <string>MOUNT_DIR</string>
            <string>-oreconnect,auto_cache,volname=FINDER_VOLUME_NAME</string>
            <string>-f</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Wobei NAME ein beliebiger Name ist und die Restvariablen ziemlich selbstbeschreibend sind.


Wenn Sie aus irgendeinem Grund SSH_AUTH_SOCK nicht definiert haben (führen Sie den Befehl launchctl getenv SSH_AUTH_SOCK aus, um ihn zu überprüfen), erstellen Sie ein Hilfsskript, z. B. /usr/local/bin/sshfs-authsock mit folgendem Inhalt:

#!/bin/bash
export SSH_AUTH_SOCK=$(ls -t /tmp/com.apple.launchd.*/Listeners | head -1)
/usr/local/bin/sshfs $*
{[15]) Und führen Sie dieses Skript anstelle von sshfs aus der plist-Datei. Also sollte dein ~/Library/LaunchAgents/NAME.sshfs.plist sein:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>NAME.sshfs</string>
    <key>ProgramArguments</key>
    <array>
            <string>/usr/local/bin/sshfs-authsock</string>
            <string>[USER@]HOST:REMOTE_DIR</string>
            <string>MOUNT_DIR</string>
            <string>-oreconnect,auto_cache,volname=FINDER_VOLUME_NAME</string>
            <string>-f</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
 3
Author: oliora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-04-12 11:09:28

Ich möchte der sehr vollständigen Antwort von dag729 etwas hinzufügen.

Wenn Sie Lion haben und jetzt OS X Fuse anstelle des alten MacFUSE, funktioniert das obige Verfahren nicht sofort, da der Pfad von sshfs unterschiedlich ist.

Wenn dies bei Ihnen der Fall ist, suchen Sie mit{[3, wo sich sshfs in Ihrer Installation befindet]}

which sshfs

Und setzen Sie diesen Pfad in das Skript /opt/local/bin/sshfs-authsock.

In meiner Installation lautet dieser Pfad /usr/local / bin / sshfs und daher ist mein Skript:

#!/bin/bash
export SSH_AUTH_SOCK=$( ls -t /tmp/launch-*/Listeners | head -1)
/usr/local/bin/sshfs $*

Ich kann bestätigen, dass der Rest noch gültig ist.

 1
Author: Tex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-01-31 03:05:43