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?
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:
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:
- Einige Pfade werden geändert
- osxfuse muss gezwungen sein, im Vordergrundmodus mit der Option
-f
-
SSH_AUTH_SOCK
ist bereits definiert, sodass es keinen Grund mehr gibt, das Skriptsshfs-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>
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.
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