fstab específico do usuário para fusermount

3

Gostaria de saber se existe algo como "user specific / etc / fstab" para o fusermount? ~ / .fstab, ~ / .config / fstab, algo semelhante, que funcionaria em cooperação com o FUSE.

eu usei

sshfs foo.bar: foo.bar/

do diretório home para se conectar ao diretório remoto (existe o diretório foo.bar, e eu tenho o arquivo .ssh / config configurado). Mas eu não gostei da repetição do foo.bar, queria usar o comando simples [cmd] foo.bar/ para montar o diretório remoto. Depois de algum googling eu descobri que o simples "mount foo.bar/" pode ser feito para funcionar com a seguinte linha em / etc / fstab (também necessária para ativar o "user_allow_other" em /etc/fuse.conf)

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

Agora "mount foo.bar" funciona como planejado (e "umount" também funciona). Mas parece estranho editar o arquivo de todo o sistema para fins específicos do usuário; também as configurações já em .ssh / config são repetidas lá (port), o arquivo de identidade deve ser especificado. Manter isso para mais sites (usuários) parece inconveniente e evidentemente não é o que / etc / fstab serve. Outra estranheza - o FUSE é executado pelo root (afaictl) ao usar esta solução.

Eu preferiria muito mais algo como "fusermount foo.bar/", com fstab específico do usuário.

Existe tal coisa?

    
por renergy 08.03.2015 / 11:58

1 resposta

0

Não há equivalente por usuário de /etc/fstab . Você pode escrever um script de shell que lê um arquivo de sua escolha e chama o comando de montagem apropriado. Observe que, do argumento foo.bar , você deve deduzir várias informações: a localização do servidor foo.bar , o diretório no servidor (aqui seu diretório inicial) e, em primeiro lugar, o fato de ser uma montagem SSHFS. / p>

#!/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 "$@"

(Aviso: código não testado.)

Esse snippet analisa um arquivo ~/.fstab com uma sintaxe remanescente de /etc/fstab : “device”, ponto de montagem, tipo de sistema de arquivos, opções. Note que aqui o tipo de sistema de arquivos é um comando para executar e o “dispositivo” é dependente do sistema de arquivos. Nem todos os comandos do sistema de arquivos FUSE usam essa sintaxe com um “dispositivo” seguido por um ponto de montagem, embora seja uma convenção comum.

Opções de SSH, como o arquivo de identidade, o nome de usuário remoto etc., podem permanecer em ~/.ssh/config . A única razão para colocá-los em /etc/fstab é permitir que essas opções sejam usadas por todos os usuários.

    
por 09.03.2015 / 01:36