Fusionmountのユーザーごとのfstab

Fusionmountのユーザーごとのfstab

フューザマウントに「ユーザー別/etc/fstab」のようなものがあるかどうか疑問に思います。 ~/.fstab、~/.config/fstab などを FUSE で使用できます。

使った

sshfs foo.bar: foo.bar/

ホームディレクトリからリモートディレクトリに接続します(foo.barディレクトリがあり、それに応じて.ssh / configが設定されています)。しかし、私はfoo.barを繰り返すのが好きではなく、単純なコマンド[cmd] foo.bar/を使用してリモートディレクトリをマウントしたいと思います。インターネットを検索した後、/etc/fstabで次の行で単純な「mount foo.bar/」を使用できることがわかりました(/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に既に存在する設定がその場所(ポート)で繰り返され、IDファイルを指定する必要があります。より多くのサイト(ユーザー)に対してこれを維持するのは不便に思われ、明らかに/ etc / fstabの目的ではありません。もう1つの奇妙なことは、このソリューションを使用するときにFUSEがルート(afaictl)によって実行されることです。

私はユーザー固有のfstabに「fusermount foo.bar/」のようなものが好きです。

そんなことありますか?

答え1

各ユーザーに対応するものはありません/etc/fstab。選択したファイルを読み取り、適切なインストールコマンドを呼び出すシェルスクリプトを作成できます。パラメータでは、サーバーの場所、サーバーのディレクトリ(この場合はホームディレクトリ)、および最も重要な事実であるSSHFSマウントなど、いくつかのfoo.bar情報を推測する必要があります。foo.bar

#!/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ファイルシステムコマンドが "device"の後にマウントポイントが続くこの構文を使用するわけではありません。

IDファイル、リモートユーザー名などのSSHオプションを残すことができます~/.ssh/config。これを入力する唯一の理由/etc/fstabは、すべてのユーザーがこれらのオプションを使用できるようにするためです。

関連情報