Este artículo fue publicado originalmente en go2linux.org. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.

sshfs monta un directorio de un equipo remoto en un directorio local, usando únicamente SSH. Si puedes entrar al servidor con ssh, puedes montarlo: el servidor no necesita software adicional ni configuración. Los archivos viajan cifrados, y cualquier programa local puede abrirlos como si estuvieran en tu disco.

Ten en cuenta que cada lectura y escritura pasa por la red. En un enlace lento, el acceso también es lento.

Instalar sshfs

Debian y Ubuntu:

sudo apt install sshfs

Fedora:

sudo dnf install fuse-sshfs

Arch Linux:

sudo pacman -S sshfs

El paquete instala FUSE, que permite a un usuario normal montar sistemas de archivos sin ser root. Las guías antiguas indican instalar fuse-utils, ejecutar modprobe fuse y agregar tu usuario al grupo fuse; nada de eso hace falta en una distribución actual.

Montar un directorio remoto

Crea un directorio vacío para usar como punto de montaje y luego monta:

mkdir -p ~/remoto
sshfs usuario@servidor.example.com:/var/www ~/remoto

Esto se ejecuta con tu usuario normal, sin sudo. La primera vez, SSH te pide aceptar la clave del servidor, y luego la contraseña, salvo que uses claves SSH.

Si dejas vacía la ruta remota, obtienes el directorio personal remoto:

sshfs usuario@servidor.example.com: ~/remoto

Comprueba que está montado:

df -h ~/remoto

Desmontar

fusermount -u ~/remoto

En algunos sistemas el comando es fusermount3. También funciona umount ~/remoto.

Opciones útiles

Un puerto SSH distinto:

sshfs -p 2222 usuario@servidor.example.com:/var/www ~/remoto

Una clave privada específica (usa la ruta completa):

sshfs -o IdentityFile=/home/yo/.ssh/id_ed25519 usuario@servidor.example.com:/var/www ~/remoto

Reconectar automáticamente cuando se corta la conexión — conviene usarlo en cualquier portátil o enlace inestable:

sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 usuario@servidor.example.com:/var/www ~/remoto

Solo lectura, cuando solo quieres mirar sin arriesgarte a cambiar nada:

sshfs -o ro usuario@servidor.example.com:/var/www ~/remoto

Mostrar los archivos remotos como propiedad de tu usuario local, cuando los ID de usuario de ambos equipos son distintos:

sshfs -o idmap=user usuario@servidor.example.com:/var/www ~/remoto

Se respeta todo lo que tengas en ~/.ssh/config (alias de host, puerto, clave, host de salto), así que con una entrada Host web el comando queda en sshfs web:/var/www ~/remoto.

Permitir que otros usuarios vean el montaje

Por defecto solo el usuario que montó el sistema de archivos puede acceder a él; incluso a root se le niega el acceso. Para abrirlo a otros, quita el comentario de esta línea en /etc/fuse.conf:

user_allow_other

Luego monta con:

sshfs -o allow_other,default_permissions usuario@servidor.example.com:/var/www ~/remoto

default_permissions hace que el kernel aplique las comprobaciones normales de permisos de archivo para esos otros usuarios.

Montar desde /etc/fstab

Para montar bajo demanda, la primera vez que algo accede al directorio, agrega una línea como esta a /etc/fstab:

[email protected]:/var/www  /mnt/remoto  fuse.sshfs  noauto,x-systemd.automount,_netdev,reconnect,IdentityFile=/home/yo/.ssh/id_ed25519,allow_other,default_permissions  0  0

Luego recarga systemd:

sudo systemctl daemon-reload
sudo systemctl restart remote-fs.target

Hay tres cosas que deben estar bien aquí:

  • El montaje lo realiza root, así que el acceso con contraseña no puede funcionar. Usa una clave sin frase de paso e indica su ruta completa en IdentityFile.
  • Root ya debe conocer la clave del servidor. Ejecuta sudo ssh [email protected] una vez y acéptala.
  • allow_other es lo que permite a tu usuario normal leer un montaje hecho por root.

Un montaje colgado

Si la conexión muere y el punto de montaje deja de responder, verás:

ls: cannot access '/home/yo/remoto': Transport endpoint is not connected

Fuerza un desmontaje diferido y vuelve a montar:

fusermount -uz ~/remoto

La opción reconnect mostrada arriba evita la mayoría de estos casos.

Estado del proyecto y una alternativa

sshfs funciona y está empaquetado en todas las distribuciones principales, pero el desarrollo del proyecto se ha reducido a un mantenimiento mínimo, así que no esperes funciones nuevas. Para el acceso ocasional a archivos de un servidor sigue siendo la herramienta más sencilla que existe.

Si quieres una alternativa con desarrollo activo, rclone puede montar el mismo servidor SFTP. Define el servidor una vez con rclone config (elige el tipo sftp), y luego:

rclone mount miservidor:/var/www ~/remoto --vfs-cache-mode writes --daemon

Se desmonta de la misma manera, con fusermount -u ~/remoto.

Ver también

man sshfs — referencia completa.