Eu uso autofs para montar meus compartilhamentos NFS sob demanda no meu Kubuntu.
autofsis 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=cifsand precede the share location with a colon (:).Example:
mntpoint -fstype=cifs ://example.com/shrnameExample: Mount read-write, specifying a user and group to own the files:
mntpoint -fstype=cifs,rw,uid=myuserid,gid=mygrpid ://example.com/shrnameExample: 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.txta 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.
