用于 fusionmount 的用户特定 fstab

用于 fusionmount 的用户特定 fstab

我想知道是否有类似“用户特定的/etc/fstab”的内容用于fusermount? ~/.fstab、~/.config/fstab 之类的东西,可以与 FUSE 配合使用。

我用了

sshfs foo.bar: foo.bar/

从主目录连接到远程目录(有 foo.bar 目录,并且我相应地设置了 .ssh/config )。但我不喜欢重复 foo.bar,想使用简单的命令 [cmd] foo.bar/ 来挂载远程目录。经过一番谷歌搜索后,我发现简单的“mount foo.bar/”可以与 /etc/fstab 中的以下行一起使用(还需要在 /etc/fuse.conf 中启用“user_allow_other”)

[email protected]:  /home/user/foo.bar  fuse.sshfs  user,IdentityFile=/home/user/.ssh/id_rsa,port=12345,allow_other  0  0

现在“mount foo.bar”按预期工作(“umount”也可以工作)。但是为了特定于用户的目的而编辑系统范围的文件似乎有点奇怪;此外,.ssh/config 中已有的设置也会在那里重复(端口),必须指定身份文件。为更多站点(用户)维护这一点似乎很不方便,而且显然不是 /etc/fstab 的用途。另一个奇怪之处 - 使用此解决方案时,FUSE 由 root (afaictl) 运行。

我更喜欢像“fusermount foo.bar/”这样的东西,带有用户特定的fstab。

有这样的事吗?

答案1

没有相当于每个用户的/etc/fstab.您可以编写一个 shell 脚本来读取您选择的文件并调用适当的安装命令。请注意,从参数 中foo.bar,您必须推断出多条信息:服务器位置foo.bar、服务器上的目录(这里是您的主目录),以及最重要的事实:它是 SSHFS 挂载。

#!/bin/bash
####
if [ -e ~/.fstab ]; then
  args=("$@")
  ((i=${#args[@]}-1))
  target=${args[$i]}
  while read filesystem mount_point command options comments; do
    if [[ $filesystem = \#* ]]; then continue; fi
    if [[ $mount_point = "$target" || $filesystem = "$target" ]]; then
      if [[ -n $options ]]; then
        args[$((i++))]=-o
        args[$((i++))]=$options
      fi
      args[$((i++))]=$filesystem
      args[$((i++))]=$mount_point
      exec "$3" "${args[@]}"
    fi
  done
fi
## Fall back to mount, which looks in /etc/fstab
mount "$@"

(警告:未经测试的代码。)

~/.fstab此代码片段使用如下语法解析文件/etc/fstab:“设备”、安装点、文件系统类型、选项。请注意,这里的文件系统类型是要执行的命令,“设备”与文件系统相关。并非所有 FUSE 文件系统命令都使用这种带有“设备”后跟挂载点的语法,尽管这是一种常见约定。

身份文件、远程用户名等 SSH 选项可以保留在~/.ssh/config.将它们放入的唯一原因/etc/fstab是允许所有用户使用这些选项。

相关内容