sshfs: Montando Sistemas de Arquivos Remotos via SSH
O Que Voce Vai Aprender
- Como montar um diretorio remoto localmente com
sshfs - Quando usar
sshfsvsscp/rsync - Como corrigir problemas comuns: desconexoes, permissoes, montagens obsoletas
Resumo Rapido
- Montar:
sshfs user@host:/path ~/mnt -o reconnect,ServerAliveInterval=15 - Desmontar:
fusermount3 -u ~/mnt(sistemas mais antigos:fusermount -u) - Editar arquivos frequentemente ->
sshfs, sincronizacao em massa ->rsync, copia unica ->scp
Pre-requisitos
- SO: Ubuntu / familia Debian (outras distros diferem apenas no nome do pacote)
- Acesso SSH ao host remoto (autenticacao por chave recomendada)
- FUSE disponivel localmente (padrao em desktops / servidores tipicos)
O Que e sshfs?
Conclusao: sshfs e uma ferramenta baseada em FUSE que monta um sistema de arquivos remoto localmente via SSH, permitindo ler e escrever arquivos remotos exatamente como locais.
sshfs (SSH Filesystem) conecta um diretorio remoto a um ponto de montagem local usando o subsistema SFTP do SSH. Uma vez montado, os arquivos remotos aparecem como caminhos locais, para que seu editor local, gerenciador de arquivos e ferramentas de build possam opera-los diretamente.
Enquanto scp / rsync copiam arquivos, sshfs expoe o remoto. Ele se destaca quando voce quer editar arquivos no local sem copiar de um lado para outro, ou abrir logs remotos em uma GUI local.
Como funciona sobre FUSE (Filesystem in Userspace), um usuario sem privilegios pode montar sem root — uma diferenca chave em relacao ao NFS / CIFS.
Como instalar?
Conclusao: No Ubuntu / Debian e um unico
sudo apt install sshfs, que instala o sshfs e as bibliotecas FUSE necessarias.
# Ubuntu / Debian $ sudo apt update $ sudo apt install sshfs # RHEL / Rocky / AlmaLinux (via EPEL) $ sudo dnf install fuse-sshfs # macOS (Homebrew, requer macFUSE) $ brew install gromgit/fuse/sshfs-mac
Verifique a instalacao:
$ sshfs --version
SSHFS version 3.7.3 FUSE library version 3.14.0
O projeto sshfs esta atualmente em modo de manutencao (sem desenvolvimento ativo de novos recursos), mas e amplamente utilizado e funciona de forma confiavel. Para novas builds que precisem de mais recursos, considere tambem NFS / Samba.
Como montar um diretorio?
Conclusao: O formato basico e
sshfs user@host:/caminho/remoto /ponto/montagem/local. Crie o ponto de montagem como um diretorio vazio primeiro.
1. Criar um ponto de montagem
$ mkdir -p ~/mnt/server
2. Montar
$ sshfs user@server:/var/www ~/mnt/server
Omita o caminho remoto para montar o diretorio home do usuario de login.
# Montar o diretorio home remoto $ sshfs user@server: ~/mnt/server
3. Verificar
$ ls ~/mnt/server $ mount | grep sshfs
user@server:/var/www on /home/local/mnt/server type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
Usando uma porta nao padrao
$ sshfs -p 2222 user@server:/var/www ~/mnt/server
Como desmontar?
Conclusao: Use
fusermount3 -u <ponto_de_montagem>. Em sistemas mais antigos com libfuse2, usefusermount -u.
# libfuse3 (Ubuntu atual, etc.) $ fusermount3 -u ~/mnt/server # libfuse2 (sistemas mais antigos) $ fusermount -u ~/mnt/server
A desmontagem falha com device is busy se voce estiver com cd dentro da montagem ou um processo tiver arquivos abertos la. Saia do diretorio e feche todos os apps primeiro. Se ainda nao liberar, fusermount3 -uz executa uma desmontagem lazy.
Como manter estavel? (opcoes praticas)
Conclusao: Na pratica, sempre adicione
reconnecteServerAliveInterval. A montagem sobrevive a quedas breves de rede e evita desconexoes ociosas.
$ sshfs user@server:/var/www ~/mnt/server \
-o reconnect \
-o ServerAliveInterval=15 \
-o ServerAliveCountMax=3Opcoes usadas frequentemente:
| Opcao | Efeito |
|---|---|
-o reconnect |
Reconectar automaticamente apos uma queda |
-o ServerAliveInterval=15 |
Enviar keepalive a cada 15s para evitar desconexao ociosa |
-o ServerAliveCountMax=3 |
Considerar desconectado apos 3 respostas perdidas |
-o IdentityFile=~/.ssh/id_ed25519 |
Especificar a chave privada |
-o follow_symlinks |
Seguir symlinks no remoto |
-o idmap=user |
Mapear UID remoto para o usuario local |
-C / -o compression=yes |
Comprimir transferencias (util em links lentos) |
-o ro |
Montar somente leitura |
Com autenticacao por chave e um ~/.ssh/config organizado, voce pode conectar apenas com um alias de Host: sshfs myserver:/var/www ~/mnt/server. Veja os artigos relacionados.
Como montar automaticamente na inicializacao?
Conclusao: Adicione uma entrada
fuse.sshfsao/etc/fstab. Como depende da rede, sempre inclua_netdev.
# /etc/fstab user@server:/var/www /home/local/mnt/server fuse.sshfs _netdev,reconnect,IdentityFile=/home/local/.ssh/id_ed25519,idmap=user,allow_other 0 0
Se voce usar allow_other (permitir que usuarios alem do que montou acessem), deve ser habilitado no /etc/fuse.conf:
# /etc/fuse.conf user_allow_other
Na inicializacao, a rede e as chaves podem nao estar prontas ainda. Adicione _netdev, e se a confiabilidade importar, prefira users,noauto para uma montagem manual / no login em vez de montagem automatica na inicializacao.
Solucao de Problemas
Conclusao: A maioria dos problemas envolve chave/permissao, montagem obsoleta apos uma queda, ou
allow_othernao habilitado. Restrinja pela sintoma.
Permission denied
$ sshfs user@server:/var/www ~/mnt/server read: Connection reset by peer
- Primeiro confirme que o SSH simples funciona:
ssh user@server - Chave ausente -> adicione
-o IdentityFile=... - Verifique a permissao de leitura/escrita no diretorio remoto:
ls -ld /var/www
Transport endpoint is not connected (montagem obsoleta)
Apos uma conexao perdida, o ponto de montagem pode ficar em estado quebrado. Desmonte e remonte.
$ fusermount3 -u ~/mnt/server $ sshfs user@server:/var/www ~/mnt/server -o reconnect
Dono do arquivo aparece como nobody / UID numerico
Os UIDs local e remoto nao correspondem. Adicione -o idmap=user para mapear a propriedade para o usuario que montou.
Outros usuarios (ex: www-data) nao conseguem acessar a montagem
Adicione -o allow_other e insira user_allow_other no /etc/fuse.conf.
sshfs vs scp / rsync — qual usar?
Conclusao: Use sshfs para edicao frequente no local, rsync para sincronizacao em massa/agendada e scp para copias unicas. Seus papeis nao se sobrepoem.
| Caso de uso | Recomendado |
|---|---|
| Editar / navegar o remoto diretamente | sshfs |
| Sincronizar / fazer backup de dados grandes | rsync |
| Copia unica de arquivo | scp |
| Transferencia confiavel em links lentos/instaveis | rsync |
Modelos para copiar e colar
# Montar (pratico) mkdir -p ~/mnt/server sshfs user@server:/var/www ~/mnt/server -o reconnect,ServerAliveInterval=15,idmap=user # Desmontar fusermount3 -u ~/mnt/server