sshfs: Montando Sistemas de Arquivos Remotos via SSH

sshfs: Montando Sistemas de Arquivos Remotos via SSH

O Que Voce Vai Aprender

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

Opcoes 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.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 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_other nao 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

Proximas Leituras