Logo OpenSSH

SSHFS: Montar directorio remoto con SSH en Debian

 
 

En este artículo veremos como montar directorio remoto con SSH. Instalaremos los paquetes necesarios, prepararemos nuestro sistema y veremos los métodos para montar los directorios.

Índice General

  1. ¿De qué va esto?
  2. Instalación los paquetes sshfs y fuse
  3. Preparando el sistema
  4. Montando un sistema de ficheros remoto
  5. Desmontar el sistema de ficheros remoto

 

  1. ¿De qué va esto? (Volver al índice General)
    Algunas veces necesitamos trabajar durante bastante tiempo con un sistema de ficheros remoto, copiando y editando archivos. Una solución para trabajar con el sistema remoto sería montar un recurso remoto al estilo de NFS y sin tener que ser root. FUSE es un módulo del kernel que permite montar distintos sistemas de ficheros con un usuario normal sin privilegios. SSHFS (Secure SHell FileSystem) es un programa creado por el autor de FUSE que permite montar un directorio remoto usando SSH. Podemos interactuar con archivos remotos ubicados en un servidor SSH, viéndolos como si estuvieran en nuestro ordenador local.

    Para montar un directorio remoto con SSH tendremos que seguir los pasos que a continuación mostramos.

  2.  

  3. Instalación de los paquetes sshfs y fuse (Volver al índice General)
    Para montar un directorio remoto con ssh, hay que instalar el paquete sshfs. Para lo cual, en primer lugar actualizaremos los repositorios:

    $ sudo apt-get update

    y tras actualizar los repositorios instalamos los paquetes:

    $ sudo apt-get install sshfs fuse
  4.  

  5. Preparando el sistema (Volver al índice General)
    El usuario que monta el sistema de ficheros remoto tiene que pertenecer al grupo fuse. De no existir el grupo lo creamos con la orden siguiente:

    $ sudo addgroup fuse

    A continuación añadimos los usuarios que pertenecerán al grupo fuse para montar sistemas de ficheros remotos:

    $ sudo adduser usuario_local fuse

    o también de la forma:

    $ sudo usermod -G fuse -a usuario_local

    Tenemos que salir y volver a entrar en el sistema para que surtan efecto los cambios de grupo.

    Antes de empezar a usar fuse tenemos que cargar el módulo en memoria:

    $ sudo modprobe fuse

    Si vamos a usar fuse y sshfs regularmente, es conveniente que editemos el fichero /etc/modules y añadamos el módulo fuse, de otro modo, tendremos que cargar el módulo manualmente cada vez que queramos usarlo:

    $ sudo sh -c "echo fuse >> /etc/modules"

    Para nuestro ejemplo crearemos un directorio donde montaremos el sistema de ficheros remoto:

    $ mkdir ~/directorio_local
  6.  

  7. Montando un sistema de ficheros remoto (Volver al índice General)
    • Desde la interfaz de línea de comandos (Volver al índice General)
      A continuación montamos el sistema de ficheros remoto en el directorio local:

      $ sshfs mortadelo@servidor_remoto:/home/mortadelo/temporal ~/directorio_local

      La orden anterior monta el directorio /home/mortadelo/temporal, ubicado en el servidor remoto, en el directorio local /home/mortadelo/directorio_local.

      Ahora podemos trabajar en el directorio montado como si de un directorio local se tratase.

    •  

    • Utilizando fstab (Volver al índice General)
      Si vamos a trabajar a diario con este directorio remoto, quizás sea buena idea añadirlo al fichero /etc/fstab, ya que de esta forma se montará automáticamente al iniciar nuestro equipo, o manualmente si elegimos la opción noauto, sin necesidad de especificar la localización remota cada vez.

      Para que cada vez que se monta el directorio remoto no se nos pregunte la password del usuario mortadelo, deberemos generar la clave pública para el usuario mortadelo y subirla al servidor remoto. En el artículo Acceder a un equipo remoto con cliente SSH en Debian publicado con anterioridad en ZeppelinuX se explica cómo generar el par de claves pública/privada y como copiar la clave pública en el servidor remoto.

      Para el directorio utilizado en el ejemplo anterior, la línea a añadir en /etc/fstab sería la siguiente:

      mortadelo@servidor_remoto:/home/mortadelo/temporal /home/mortadelo/directorio_local fuse.sshfs defaults,idmap=user,_netdev,users,IdentityFile=/home/mortadelo/.ssh/id_dsa,allow_other,reconnect 0 0

      Si nuestro equipo tiene una distribución que use Systemd como sistema de inicio, podemos utilizar el montaje por demanda, es decir, el directorio de montará de forma automática sólo cuando lo necesitemos, por ejemplo, cuando intentemos acceder al directorio local que está enlazado con el directorio remoto.

      Para conseguir esto tendremos que reemplazar la linea anterior por la siguiente:

      mortadelo@servidor_remoto:/home/mortadelo/temporal /home/mortadelo/directorio_local fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/mortadelo/.ssh/id_dsa,allow_other,reconnect 0 0

      En algunas distribuciones será necesario habilitar la directriz user_allow_other en el archivo /etc/fuse.conf para montar a demanda el directorio remoto.

      Observemos en la línea que añadimos en /etc/fstab como indicamos la ruta a la clave privada del usuario: IdentityFile=/home/mortadelo/.ssh/id_dsa.

      Para recargar /etc/fstab y surtan efecto los cambios ejecutar:

      $ sudo mount -a
  8.  

  9. Desmontar el sistema de ficheros remoto (Volver al índice General)
    Si queremos desmontar el directorio remoto ejecutaremos el comando siguiente:

    $ fusermount -u ~/directorio_local

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

2 comentarios

  1. gerardo

    Hola, muchas gracias, me ha servido, pero como puedo hacer o evitar que tener que poner mount -a. Estoy utilziando Debian 11.
    Gracias de antemano

    • J. Carlos

      Hola Gerardo,

      Imagino que lo preguntas porque tienes intención de modificar el archivo /etc/fstab. Si es así, te explico:

      La orden $ sudo mount -a se utiliza si has modificado el archivo /etc/fstab y quieres que surtan efecto los cambios sin tener que reiniciar el equipo.

      Podrías montar solo el sistema de archivos remoto con el comando mount, pero si has modificado el archivo /etc/fstab, es más cómodo optar por mount -a, ya que la orden por demanda con el comando mount y con los parámetros del ejemplo del artículo sería algo así:

      $ sudo mount -t fuse.sshfs -o defaults,idmap=user,_netdev,users,IdentityFile=/home/mortadelo/.ssh/id_dsa,allow_other,reconnect mortadelo@servidor_remoto:/home/mortadelo/temporal /home/mortadelo/directorio_local

      Como puedes ver, no tiene sentido si has modificado el archivo /etc/fstab. Es muy engorroso.

      También puedes reiniciar el sistema para que surtan efecto los cambios en /etc/fstab.

      Espero que te haya servido la explicación.
      Un Saludo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.