Eu uso autofs para montar meus compartilhamentos NFS sob demanda no meu Kubuntu.
autofs
is a program for automatically mounting directories on an as-needed basis. Auto-mounts are mounted only as they are accessed, and are unmounted after a period of inactivity. Because of this, automounting NFS/Samba shares conserves bandwidth and offers better overall performance compared to static mounts viafstab
.
No seu caso, isso é útil:
When specifying a CIFS share in a map file, specify
-fstype=cifs
and precede the share location with a colon (:
).Example:
mntpoint -fstype=cifs ://example.com/shrname
Example: Mount read-write, specifying a user and group to own the files:
mntpoint -fstype=cifs,rw,uid=myuserid,gid=mygrpid ://example.com/shrname
Example: Mount read-write, specifying a username and password to use to connect to the share:
mntpoint -fstype=cifs,rw,username=myuser,password=mypass ://example.com/shrname
Um arquivo de mapa é /etc/auto.master
ou /etc/auto.*
ou por ex. %código%. Leia a documentação e saiba como configurar o daemon.
À primeira vista, parece que esta não é a solução perfeita para você, porque parece que você precisa armazenar as credenciais em um arquivo. Este seria um arquivo de mapa (como no exemplo acima) ou um arquivo separado, por exemplo /etc/auto.master.d/*
como você pode ver aqui . No entanto existe este comentário lá :
I suppose you could make
credentials.txt
a named pipe and run a password prompting program to feed the pipe.
Se isso estiver correto, então espero que esse "programa de prompts de senha" seja apenas um único credentials.txt
ou echo
que você invoque manualmente.
EDITAR:
What I'm asking for is an easy way to do this without having to manually invoke the command at a prompt, and without having to store (or fudge) the credentials in a file.
O Linux pode montar / desmontar vários sistemas de arquivos via printf
e mount.*
executáveis. Essa opção umount.*
no exemplo vinculado é, na verdade, uma opção para credentials=/etc/credentials.txt
. Eu acho que se você usar algo como
mount -t foo …
ou na configuração mount.cifs
:
mntpoint -fstype=foo …
ele tentará encontrar e executar autofs
, passando todas as outras opções para ele.
Portanto, você deve criar mount.foo
como um wrapper acima de mount.mycifs
. Ele deve solicitar suas credenciais de alguma forma (simples mount.cifs
talvez, use xterm -e …
ou read
ou outra coisa; mas leia isto por favor ), adicione dialog
ou -o username=…,password=…
ao restante das opções e passe-as para -o credentials=…
(ou mount.cifs
) que faz a montagem real.
Se você tiver mount -t cifs
, faça umount.cifs
um link simbólico para ele.
Em seguida, use umount.mycifs
no seu arquivo de mapeamento sem nenhuma opção relacionada a credenciais.
O seguinte -fstype=mycifs
é uma prova de conceito rápida e suja. Entenda o que ele faz antes de executá-lo no seu sistema operacional porque ele será executado como /sbin/mount.mycifs
, eu sou um cara aleatório na Internet e você não deve confiar em mim.
#!/bin/bash
tmpf="'mktemp'"
DISPLAY=:0 XAUTHORITY=/home/ola/.Xauthority xterm -e /bin/bash -c '\
read -p "user:" u; \
read -sp "password:" p; \
printf "username=%s\npassword=%s" "$u" "$p" > "$0"; \
' "$tmpf"
mount -t cifs "$@" -o credentials="$tmpf"
rm "$tmpf"
Ele deve ser de propriedade de root
ou o que for apropriado para root:root
em seu sistema operacional. Não se esqueça de torná-lo executável ( mount.*
), não funcionará de outra forma. Observe que há um corte desagradável com sudo chmod a+x /sbin/mount.mycifs
e DISPLAY
que permite que o daemon XAUTHORITY
exiba a janela autofs
na sua tela (?), Mas em geral, não deve fazer isso . O hack é apenas para o daemon, xterm
deve ser capaz de exibir mount -t mycifs …
sem o hack se invocado de dentro do seu ambiente de desktop.
Para torná-lo menos sujo, você deve escrever outro programa ou script e executá-lo com as permissões limitadas do usuário local antes de acessar um diretório onde seu CIFS seria montado automaticamente. Esse script deve aguardar por um sinal de xterm
, solicitar as credenciais (ele pode exibir janelas etc. sem hacks desagradáveis) e passá-las para mount.mycifs
, que não deve exibir janelas nem prompts por si próprio.