題 在啟動時通過macfuse掛載sshfs


我想在Mac OSX下啟動時掛載sshfs文件夾:我現在正在使用Macfusion,這是MacFUSE的GUI,但我必須手動掛載文件夾。

我怎樣才能做到這一點?


6
2018-04-23 20:41


起源




答案:


如果您維護遠程計算機,那麼在本地安裝該計算機的文件系統以移動文件非常有用。 MacFuse和 sshfs 讓它變得非常簡單,雖然在登錄時自動設置和安裝可能有點棘手。

首先,確保無需輸入密碼即可ssh到遠程計算機。進行設置 Leopard最終在登錄時支持ssh-agent 並驗證它是否有效:

ssh USER@HOSTNAME:

如果它在沒有提示輸入密碼或密鑰的情況下登錄,您就可以繼續了。

接下來,安裝 sshfs 和麥克福斯一樣 在OS X Leopard 10.5.5上安裝帶有MacFuse 1.7的sshfs 1.9

找出要安裝遠程卷的位置。我不建議使用 /Volumes 因為當你卸載東西時,OS X似乎會自動刪除那裡的目錄。所以我使用了 /mnt/主機名

mkdir -p / mnt /主機名

(顯然,你會替換 HOSTNAME 用您的遠程服務器名稱。)

然後確保您可以將遠程站點作為卷安裝,而無需使用指定密碼 sshfs

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

將VOLUME_NAME設置為您希望在Finder中命名卷的任何內容。我使用了HOSTNAME。 PATH是可選的;將其設置為要在遠程主機上裝入的目錄。如果沒有設置,它將使用您的主目錄。

如果沒有收到錯誤消息, 當你做的時候 ls /mnt/主機名 遠程文件顯示,然後您就可以繼續下一步了。

卸載剛掛載的捲:

umount / mnt /主機名

現在是一個棘手的派對。您需要創建一個LaunchAgent項以在登錄時裝入卷。這本身很容易。但是,如果您的系統與我的系統類似,則此項目不會正確設置其SSH_AUTH_SOCK,因此如果不使用密碼,它將無法登錄到遠程主機。您必須自己手動設置SSH_AUTH_SOCK。

首先,創建一個包裝器 sshfs 這將為您設置SSH_AUTH_SOCK。把它放在任何你想要的文件中。 我建議 /opt/local/bin/sshfs-authsock

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

基本上,此文件將SSH_AUTH_SOCK設置為tmp目錄中最新的套接字。在大多數情況下,這應該是正確的。它不太可能失敗,如果確實沒有安全問題。

現在您可以最終創建launchd plist文件。把它放進去

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

(如果主持人的路徑是,比方說, foo.niskala.org 你的PATH是 /tmp,那麼你得到的文件名就是 org.niskala.foo.tmp.sshfs.plist。 這只是一個約定,隨意命名文件,無論你想要什麼, 真;但它確實需要結束 .plist。)

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

現在加載plist文件並運行它以查看它是否有效。

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

如果您沒有看到任何錯誤消息,請查看卷是否已正確安裝:

ls / mnt /主機名

如果你的遠程文件出現了,那太好了!你完成了!

如果沒有,請使用

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

在對文件進行編輯之前卸載文件,然後使用 ps auxwww | grep sshfs 和 kill 找到並殺死任何人 sshfs 再次嘗試之前的過程。

參考文獻:


5
2018-05-06 21:37





我想更新dag729的最佳答案。在帶有OS X Fuse 2.8.3的El Captain OS X上,情況略有不同:

  1. 一些路徑已更改
  2. 必須強制osxfuse以前台模式運行 -f 選項
  3. SSH_AUTH_SOCK 已定義,所以沒有理由創建 sshfs-authsock 腳本

我也建議不要使用 allow_other 選項(出於安全原因)和使用 auto_cache 選項只是因為它聽起來很有用。請檢查 OS X保險絲安裝選項 詳情。

這是 ~/Library/LaunchAgents/NAME.sshfs.plist 我使用的文件:

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

哪裡 NAME 是你喜歡的任何名字,其餘變量都是自我描述性的。


如果由於某種原因你沒有 SSH_AUTH_SOCK 定義(運行命令 launchctl getenv SSH_AUTH_SOCK 檢查它然後創建一個幫助腳本,例如 /usr/local/bin/sshfs-authsock 具有以下內容:

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

並運行此腳本而不是 sshfs 來自plist文件。所以你的 ~/Library/LaunchAgents/NAME.sshfs.plist 應該:

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

2
2018-04-12 10:59





我想為dag729添加一些非常完整的答案。

如果你有獅子並且現在有 OS X保險絲 而不是舊的MacFuse,那麼上面的過程將不會開箱即用,因為sshfs的路徑是不同的。

如果是這種情況,請查看安裝中使用的sshfs

which sshfs

並把  / opt / local / bin / sshfs-authsock腳本中的路徑。

在我的安裝中,該路徑是/ usr / local / bin / sshfs,因此我的腳本是:

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

我可以確認其餘的仍然有效。


1
2018-01-31 03:05