如何在 OSX 上使用 /etc/fstab 和/或 automount 与 sshfs?

Ada*_*dam 6 mount sshfs automount macos

我正在尝试从我的 Mavericks Mac 上的远程 Ubuntu 计算机自动挂载目录。SSHFS 在以多种不同方式手动安装时可以完美运行。标准 sshfs 挂载效果很好:

sshfs user@desk:/home/user desk 
Run Code Online (Sandbox Code Playgroud)

我什至可以使用mount

sudo mount -t sshfs -o allow_other,IdentityFile=/Users/user/.ssh/nopass_id_dsa user@192.168.1.2:/home/user desk
Run Code Online (Sandbox Code Playgroud)

(我按照OSXFuse自动安装说明进行设置mount_sshfs

我想把它变成自动挂载。OSXFuse推荐的最简单的方法是将上面的mount命令变成一个/etc/fstab条目:

user@192.168.1.2:/home/user    /Network/desk   sshfs   allow_other,IdentityFile=/Users/user/.ssh/nopass_id_dsa 0 0 
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

Network $ sudo mount desk
mount: desk: unknown special file or file system.
Run Code Online (Sandbox Code Playgroud)

同样,如果我这样做,sudo automount -vc那么当我尝试输入挂载点时,我要么会遇到很长的超时,要么会出现无用的“不允许操作”错误,具体取决于我如何处理 fstab 选项的格式。当我尝试设置自动挂载映射时,我遇到了相同的错误,如此处所述

我的 fstab 条目有什么问题?或者,我还能如何在 OSX 上自动挂载 sshfs?

(我在 10.9.5 上使用自制程序的 sshfs 2.5.0)

Ada*_*dam 2

由于 OSXFuse 中的错误,这对于allow_other 标志的工作是必要的:

sudo sysctl -w osxfuse.tunables.allow_other=1
Run Code Online (Sandbox Code Playgroud)

这可能会也可能不会解决 fstab 问题,但它确实适用于直接映射。这是我的设置方法。

将此行添加到 /etc/auto_master:

/-                              auto_ssh          -nobrowse,nosuid
Run Code Online (Sandbox Code Playgroud)

创建/etc/auto_ssh:

/Users/USER/MOUNT_POINT          -fstype=sshfs,allow_other,idmap=user,cache=no          USER@LINUXMACHINE:/home/USER
Run Code Online (Sandbox Code Playgroud)

(假设您设置了无密码密钥。)

告诉 autofs 您的更改:

sudo automount -vc
Run Code Online (Sandbox Code Playgroud)

要使 osxfuse.tunables.allow_other 更改在重新启动后仍然有效:

将以下内容放入/Library/LaunchDaemons/sysctl.plist

<?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>Label</key>
 <string>sysctl</string>
 <key>ProgramArguments</key>
 <array>
   <string>/bin/bash</string>
   <string>-c</string>
   <string>/Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs; /usr/sbin/sysctl -w osxfuse.tunables.allow_other=1</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

使用以下命令加载 plist:

launchctl load /Library/LaunchDaemons/sysctl.plist
Run Code Online (Sandbox Code Playgroud)