sshfs: Montando Sistemas de Arquivos Remotos via SSH

sshfs: Montando Sistemas de Arquivos Remotos via SSH

O Que Você Vai Aprender

  • Como montar um diretório remoto localmente com sshfs
  • Quando usar sshfs vs scp / 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, use fusermount -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 reconnect e ServerAliveInterval. 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=3

Opçõ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.sshfs ao /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_other nã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

Próximas Leituras