sshfs: Montando Sistemas de Arquivos Remotos via SSH
O Que Você Vai Aprender
- Como montar um diretório remoto localmente com
sshfs - Quando usar
sshfsvsscp/rsync - Como corrigir problemas comuns: desconexões, permissões, montagens obsoletas
Resumo Rápido
- Montar:
sshfs user@host:/path ~/mnt -o reconnect,ServerAliveInterval=15 - Desmontar:
fusermount3 -u ~/mnt(sistemas mais antigos:fusermount -u) - Editar arquivos frequentemente ->
sshfs, sincronização em massa ->rsync, cópia única ->scp
Pré-requisitos
- SO: Ubuntu / família Debian (outras distros diferem apenas no nome do pacote)
- Acesso SSH ao host remoto (autenticação por chave recomendada)
- FUSE disponível localmente (padrão em desktops / servidores típicos)
O Que é sshfs?
Conclusão: sshfs é 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 diretório 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 operá-los diretamente.
Enquanto scp / rsync copiam arquivos, sshfs expõe o remoto. Ele se destaca quando você 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 usuário sem privilégios pode montar sem root — uma diferença chave em relação ao NFS / CIFS.
Como instalar?
Conclusão: No Ubuntu / Debian é um único
sudo apt install sshfs, que instala o sshfs e as bibliotecas FUSE necessárias.
# 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 instalação:
$ sshfs --version
SSHFS version 3.7.3 FUSE library version 3.14.0
O projeto sshfs está atualmente em modo de manutenção (sem desenvolvimento ativo de novos recursos), mas é amplamente utilizado e funciona de forma confiável. Para novas builds que precisem de mais recursos, considere também NFS / Samba.
Como montar um diretório?
Conclusão: O formato básico é
sshfs user@host:/caminho/remoto /ponto/montagem/local. Crie o ponto de montagem como um diretório 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 diretório home do usuário 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 não padrão
$ sshfs -p 2222 user@server:/var/www ~/mnt/server
Como desmontar?
Conclusão: 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 você estiver com cd dentro da montagem ou um processo tiver arquivos abertos lá. Saia do diretório e feche todos os apps primeiro. Se ainda não liberar, fusermount3 -uz executa uma desmontagem lazy.
Como manter estável? (opções práticas)
Conclusão: Na prática, sempre adicione
reconnecteServerAliveInterval. A montagem sobrevive a quedas breves de rede e evita desconexões ociosas.
$ sshfs user@server:/var/www ~/mnt/server \
-o reconnect \
-o ServerAliveInterval=15 \
-o ServerAliveCountMax=3Opções usadas frequentemente:
| Opção | Efeito |
|---|---|
-o reconnect |
Reconectar automaticamente após uma queda |
-o ServerAliveInterval=15 |
Enviar keepalive a cada 15s para evitar desconexão ociosa |
-o ServerAliveCountMax=3 |
Considerar desconectado após 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 usuário local |
-C / -o compression=yes |
Comprimir transferências (útil em links lentos) |
-o ro |
Montar somente leitura |
Com autenticação por chave e um ~/.ssh/config organizado, você pode conectar apenas com um alias de Host: sshfs myserver:/var/www ~/mnt/server. Veja os artigos relacionados.
Como montar automaticamente na inicialização?
Conclusão: 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 você usar allow_other (permitir que usuários além do que montou acessem), deve ser habilitado no /etc/fuse.conf:
# /etc/fuse.conf user_allow_other
Na inicialização, a rede e as chaves podem não estar prontas ainda. Adicione _netdev, e se a confiabilidade importar, prefira users,noauto para uma montagem manual / no login em vez de montagem automática na inicialização.
Solução de Problemas
Conclusão: A maioria dos problemas envolve chave/permissão, montagem obsoleta após uma queda, ou
allow_othernão 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 permissão de leitura/escrita no diretório remoto:
ls -ld /var/www
Transport endpoint is not connected (montagem obsoleta)
Após uma conexão 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 numérico
Os UIDs local e remoto não correspondem. Adicione -o idmap=user para mapear a propriedade para o usuário que montou.
Outros usuários (ex: www-data) não conseguem acessar a montagem
Adicione -o allow_other e insira user_allow_other no /etc/fuse.conf.
sshfs vs scp / rsync — qual usar?
Conclusão: Use sshfs para edição frequente no local, rsync para sincronização em massa/agendada e scp para copias únicas. Seus papéis não se sobrepõem.
| Caso de uso | Recomendado |
|---|---|
| Editar / navegar o remoto diretamente | sshfs |
| Sincronizar / fazer backup de dados grandes | rsync |
| Cópia única de arquivo | scp |
| Transferência confiável em links lentos/instáveis | 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