在启动时通过 macfuse 挂载 sshfs

dag*_*729 7 boot mount sshfs macfuse macos

我想在 Mac OSX 下启动时挂载一个 sshfs 文件夹:我现在正在使用 Macfusion,这是 MacFUSE 的 GUI,但我必须手动挂载该文件夹。

我怎样才能做到这一点?

dag*_*729 7

如果您维护一台远程机器,那么在本地挂载该机器的文件系统以移动文件会非常有用。MacFuse 并sshfs使其变得非常简单,尽管在登录时自动设置和安装它可能有点棘手。

首先,确保您可以在不输入密码的情况下通过 ssh 连接到远程机器。在Leopard 中进行设置,最终在登录时支持 ssh-agent并验证它是否有效:

ssh USER@HOSTNAME:
Run Code Online (Sandbox Code Playgroud)

如果它在没有提示输入密码或密钥的情况下让您登录,您就可以继续了。

接下来,sshfs按照在 OS X Leopard 10.5.5 上使用 MacFuse 1.7 安装 sshfs 1.9安装和 MacFuse 。

找出您想要安装远程卷的位置。我不建议使用,/Volumes因为当您卸载东西时,OS X 似乎会自动删除其中的目录。所以我用/mnt/HOSTNAME

mkdir -p /mnt/主机名

(显然,您将替换HOSTNAME为远程服务器的名称。)

然后确保您可以使用以下命令将远程站点安装为卷而无需指定密码sshfs

sshfs USER@HOSTNAME:PATH /mnt/HOSTNAME -oreconnect,allow_other,volname=VOLUME_NAME
Run Code Online (Sandbox Code Playgroud)

将 VOLUME_NAME 设置为您希望在 Finder 中为您的卷命名的任何内容。我使用了 HOSTNAME。PATH 是可选的;将其设置为您要在远程主机上安装的任何目录。如果未设置,它将使用您的主目录。

如果您没有收到错误消息,并且当您执行此操作时 ,远程文件会显示出来,那么您就可以继续下一步了。ls /mnt/HOSTNAME

卸载刚刚挂载的卷:

卸载 /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 $*
Run Code Online (Sandbox Code Playgroud)

基本上,此文件将 SSH_AUTH_SOCK 设置为 tmp 目录中的最新套接字。在大多数情况下,这应该是正确的。它不太可能失败,如果失败也不会有安全问题。

现在您终于可以创建 launchd plist 文件了。把这个放进去

~/Library/LaunchAgents/BACKWARDS_HOST_DNS.PATH.sshfs.plist
Run Code Online (Sandbox Code Playgroud)

(如果您的主机的路径是,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>
Run Code Online (Sandbox Code Playgroud)

现在加载 plist 文件并运行它以查看它是否有效。

launchctl load ~/Library/LaunchAgents/BACKWARDS_HOST_DNS.PATH.sshfs
launchctl start BACKWARDS_HOST_DNS.PATH.sshfs
Run Code Online (Sandbox Code Playgroud)

如果没有看到错误消息,请查看卷是否已正确安装:

ls /mnt/主机名

如果您的远程文件显示出来,那就太好了!你完成了!

如果没有,请使用

launchctl unload ~/Library/LaunchAgents/BACKWARDS_HOST_DNS.PATH.sshfs
Run Code Online (Sandbox Code Playgroud)

在对其进行编辑之前卸载文件,然后在重试之前使用ps auxwww | grep sshfskill查找并终止任何sshfs进程。

参考: