Usando o sshfs

Usando o sshfs

Além de permitir rodar comandos e aplicativos remotamente, o SSH inclui também um módulo de transferência de arquivos, o SFTP, usado por 9 em cada 10 administradores de sistemas Linux. Para transferir arquivos, o comando básico é o “sftp”, que lhe dá um prompt de transferência de arquivos. O uso é similar ao do SSH, basta incluir o login de acesso e o endereço do servidor, como em:

# sftp gdh@gdhn.com.br

No dia-a-dia, você dificilmente vai utilizar o SFTP em linha de comando, pois existem interfaces mais práticas. Nas distribuições baseadas no Gnome, você pode utilizar o módulo “ssh://” do Nautilus, digitando “ssh://usuario@servidor” diretamente na barra de endereços (clique no ícone com a folha de papel para liberar a edição), o que permite acessar os arquivos diretamente e inclusive copiar e colar arquivos entre diversas janelas do navegador:

dca9331

Nas distribuições baseadas no KDE, você obtém a mesma função através do módulo “fish://” do Konqueror. Basta digitar “fish://usuario@servidor” na barra de endereços.

O grande problema é que, em ambos os casos, o acesso aos arquivos do servidor remoto não é tão transparente quanto ao montar um compartilhamento NFS ou Samba, pois, por baixo dos panos, ele ainda precisa transferir o arquivo inteiro antes de abri-lo ou salva-lo. Se você tentar abrir um arquivo de vídeo, por exemplo, ele vai primeiro transferir todo o arquivo para um diretório temporário e só então abrí-lo.

Em dicas anteriores, falei sobre o shfs, que permite montar diretórios remotos usando o SSH, como se fossem compartilhamentos de rede. Montar os diretórios torna o acesso mais transparente e mais robusto, tornando o acesso aos arquivos muito mais ágil, sobretudo quando você precisa apenas editar pequenos arquivos.

O shfs foi abandonado pelo mantenedor e se tornou obsoleto (o módulo sequer compila nas versões atuais do Kernel), mas já temos um sucessor aprimorado para ele, o sshfs.

Apesar do nome ser parecido, o modo de funcionamento dos dois é bastante diferente. O antigo shfs utilizava um módulo de Kernel, que precisava ser compilado durante a instalação e que causava problemas de instabilidade em algumas versões. O sshfs, por sua vez, utiliza uma estrutura bem mais limpa, baseada no uso do módulo fuse (o mesmo subsistema utilizado pelo GmailFS), que já vem pré-instalado em praticamente todas as distribuições atuais. A única grande limitação é que (pelo menos por enquanto) ele só roda no Linux, o que deixa de fora administradores que utilizam o putty ou outro cliente SSH for Windows.

Se você está usando uma versão recente do Ubuntu, o Debian Etch (em diante) ou qualquer distribuição recente da família do Debian, você pode instalá-lo diretamente via apt-get:

# apt-get install sshfs

Ele está disponível também nas versões recentes do Fedora e do CentOS, onde ele pode ser instalado pelo yum:

# yum install sshfs

Se tudo mais falhar, você pode baixar o pacote com o código fonte no: http://fuse.sourceforge.net/sshfs.html

Com o pacote instalado, o uso é bastante simples. Use o comando “sshfs”, seguido pelo usuário, endereço do servidor, a pasta remota e a pasta local onde ela será montada, como em:

# sshfs morimoto@gdhn.com.br:/home/morimoto gdhn/

ou:

# sshfs root@192.168.1.254:/ /mnt/servidor

Para desmontar as pastas posteriormente, usamos o comando “fusermount -u”, seguido pela pasta local, como em:

# fusermount -u /mnt/gdhn

Originalmente, o sshfs permite que apenas o usuário que realizou a montagem tenha acesso aos arquivos dentro da pasta local. Se você deseja que todos os usuários do sistema tenham acesso, adicione o parâmetro “-o allow_other”, como em:

# sshfs root@gdhn.com.br:/var/www/gdhn /mnt/gdhn -o allow_other

O grande problema em utilizar esta opção é que todos os acessos aos arquivos remotos serão feitos usando o login especificado ao fazer a montagem (o root no exemplo anterior), o que vai essencialmente desativar as permissões de acesso, permitindo que cada usuário faça o que bem entender. Para evitar isso, a melhor solução é fazer a montagem usando logins de usuário e não mais o root.

Para isso, você precisa apenas adicionar o login desejado ao grupo “fuse”, como em:

# adduser morimoto fuse

A partir daí, a montagem pode ser feita diretamente usando o login de usuário, sem precisar do root. Se a máquina é usada por diversos usuários (como no caso de um servidor de terminais), cada um poderá montar as pastas desejadas, mesmo que simultaneamente.

Se, ao tentar montar usando um login de usuário, você receber uma mensagem de erro como “fusermount: user has no write access to mountpoint /mnt/servidor”, verifique as permissões de acesso da pasta local. Para que você consiga fazer a montagem, é necessário que o usuário tenha permissão de escrita na pasta local indicada.

Se, por outro lado, você receber um erro “fuse: device not found”, significa que o módulo fuse, do qual o sshfs depende não está carregado. Você pode carregá-lo rapidamente usando o modprobe:

# modprobe fuse

Aproveite e adicione a linha “fuse” no final do arquivo “/etc/modules” para que ele passe a ser carregado automaticamente durante o boot. Se o módulo “fuse” não estiver disponível (como é o caso do CentOS 5.1, por exemplo), você pode instalá-lo a partir do pacote disponível no http://fuse.sourceforge.net/.

Se, mesmo depois de carregado o módulo fuse, você receber o erro “fusermount: failed to open /dev/fuse: No such device or address”, descarregue o módulo, crie o device manualmente e carregue-o novamente em seguida, como em:

# modprobe -e fuse
# mknod -m 666 /dev/fuse c 10 229
# modprobe fuse

Se você tiver configurado o servidor SSH remoto para utilizar uma porta diferente, especifique a porta usando o parâmetro “-p”, como em:

$ sshfs -p 42222 gdhn.com.br:/home/morimoto /home/morimoto/gdhn

Se você usa a montagem dos diretórios para acessar predominantemente arquivos de texto e outros formatos de arquivos sem compactação, pode agilizar o acesso usando a opção “-C“, que ativa o uso de compressão. Se a conexão estiver caindo depois de alguns minutos de inatividade, use a opção “ServerAliveInterval=30“, que faz com que o cliente mantenha a conexão aberta, enviando um pacote de dados a cada 30 segundos.

O sshfs pode ser usado tanto em conexões via Internet quanto dentro da sua própria rede local, em substituição a sistemas mais tradicionais de compartilhamento de arquivos, como o Samba e o NFS. Ele também possui um baixo overhead, o que permite que ele seja usado mesmo em conexões lentas, como no caso das conexões via modem ou via GPRS. No caso de conexões ruins, você pode tornar a montagem mais robusta adicionando as opções “-o reconnect” e “-o sshfs_sync“. Elas fazem com que o sshfs tente restabelecer a conexão automaticamente sempre que ela for perdida e sincronize as operações de escrita, minimizando assim a possibilidade de perda ou de corrupção dos arquivos devido a quedas na conexão.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X