¿QUÉ ES SSHFS Y FUSE?
Secure SHell FileSystem (SSHFS) es un sistema de archivos para Linux (y otros sistemas operativos con una implementación FUSE, tal como en Mac OS X), que opera sobre archivos en una computadora remota usando un entorno seguro de acceso. En la computadora local donde se monta SSHFS, la implementación hace uso del módulo del kernel FUSE. Los efectos prácticos de esto es que el usuario final puede interactuar amigablemente con archivos remotos estando en un servidor SSH, viéndolos como si estuvieran en su computadora local. En la computadora remota se utiliza el subsistema SFTP de SSH.
FUSE ó sistema de archivos en el espacio de usuario (Filesystem in Userspace) es un módulo cargable de núcleo para sistemas operativos de computador tipo Unix, que permite a usuarios no privilegiados crear sus propios sistema de archivos sin necesidad de editar el código del núcleo. Esto se logra mediante la ejecución del código del sistema de archivos en el espacio de usuario, mientras que el módulo FUSE solo proporciona un "puente" a la interfaz del núcleo real. FUSE fue oficialmente fusionado con la corriente principal del kernel Linux en la versión 2.6.14.
FUSE es útil para la creación de sistemas de archivos virtuales. A diferencia de los tradicionales sistemas de archivos, que, en esencia, guardan y recuperan los datos desde un disco, los sistemas de archivos virtuales en realidad no almacenan datos propios. Actúan como una visualización o traducción de un sistema de archivos existente o dispositivo de almacenamiento.
Los datos a través de SSHFS van cifrados
1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL
- Un PC con GNU/Linux (cualquiera, preferiblemente Debian/Ubuntu)
- Un PC cliente con Windows 10 (preferiblemente)
- Conexión a Internet
2.- MONTAR SISTEMAS REMOTOS GNU/LINUX DESDE WINDOWS
Para conseguir montar/mapear un sistema remoto GNU/Linux en un equipo con Windows, hay que instalar una serie de paquetes necesarios: winfsp y sshfs-win. También es recomendable sshfs-win-manager para gestionar las conexiones, ya que Windows a veces falla a la hora de montar y crearlas unidades. Mi recomendación es instalar los 3 programas.
Instalación de winfsp:
Para instalar winsfp, descargaremos el paquete de la web oficial de GitHub https://github.com/billziss-gh/winfsp. En este ejemplo el paquete a instalar será: winfsp-1.8.20304.msi. Una vez descargado el paquete, lo ejecutaremos con "doble click" como cualquier otro instalador en Windows.
Instalar Winsfp
En la siguiente pantalla seleccionaremos las opciones que queremos instalar. Por defecto, instalaremos solamente el Core excepto que necesitemos alguno de los otros componentes:
Componentes a Instalar
En el siguiente paso, deberemos hacer click en "Install" para comenzar la instalación de WinFsp:
Último paso para instalar WinSfp
Una vez terminada la instalación, veremos un mensaje como el siguiente y cerraremos la instalación haciendo click en "Finish":
Instalación finalizada
Instalación de SSHFS-Win:
Para instalar SSHFS-Win, descargaremos el paquete de su web oficial de GitHub https://github.com/billziss-gh/sshfs-win. Una vez descargado, lo ejecutaremos con "doble click" como cualquier otro instalador de Windows. En este ejemplo, el paquete instalado ha sido sshfs-win-3.5.20357-x64.msi.
Instalación de SSHFS-Win:
En el siguiente paso seleccionaremos las preferencias de la instalación o paquetes a instalar. Por defecto lo dejaremos como está y continuaremos la instalación:
Características de SSHFS-Win
La pantalla siguiente nos pregunta si realmente queremos hacer la instalación. Haremos click en "Install" para instalar SSHFS-Win:
Instalar SSHFS-Win
Una vez finalizada la instalación, veremos una pantalla como la siguiente:
SSHFS-Win instalado correctamente
Instalación de SSHFS-Win-Manager:
Mi recomendación para montar el sistema remoto es utilizar SSHFS-Win-Manager https://github.com/evsar3/sshfs-win-manager ya que permite tener y montar desde una interfaz gráfica muchos sistemas remotos. Lo descargaremos de su web oficial y lo instalaremos con "doble click". En este ejemplo la versión que se instala es sshfs-win-manager-setup-v1.2.1.
Para añadir una conexión nueva haremos click en "Add Connection":
Añadir conexión
A continuación, introduciremos los datos de la conexión. En este ejemplo los datos serán:
- Nombre de la conexión: DEBIAN RAUL $HOME
- IP/Host: 192.168.1.47
- Port: 22
- User: raul
- Authenticacion Method: Password
- Password: ********
- Remote: /home/raul
- Local: E:
Una vez introducidos los datos, pulsaremos "Save":
Datos de la conexión
Ahora, en el listado de conexiones, podremos conectar el sistema de ficheros remoto haciendo click en el icono de conexión a la derecha:
Conectar sistema remoto
Una vez conectado y montado el sistema de ficheros remoto, podremos acceder desde el explorador de ficheros de Windows o desde el icono de la carpeta en azul:
Acceder al contenido remoto
En la siguiente imagen se ve como la unidad remota está montada como un disco duro y con la letra de la unidad E:
Sistema remoto desde Explorador de ficheros
También podemos montar la unidad desde terminal, aunque a mi personalmente me ha dado algunos problemas (unas veces funciona, otras no...) ó desde "Mapear Unidad de Red". A continuación os pongo como se hace de las 2 formas pero sigo recomendando usar SHFS-WIN Manager.
Para montar toda la unidad /, sin especificar /home/raul como en los ejemplos anteriores ejecutaremos lo siguiente:
C:\Users\raul>net use E: \\sshfs\Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
The password is invalid for E: \\sshfs\Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo..
Enter the user name for 'sshfs': raul
Enter the password for sshfs:
The command completed successfully.
Una vez completado el comando, podremos ver como una unidad de disco (no de red) la nueva unidad:
Sistema remoto montado con SSHFS
Para hacerlo de forma gráfica haremos click con el botón derecho sobre "Mi PC" y seleccionaremos "Map network drive":
Montar sistema remoto de forma gráfica
En la siguiente pantalla introduciremos de la siguiente forma la letra de la unidad que queremos asignar y el equipo remoto como se muestra a continuación y pulsaremos "Finish":
Montar sistema remoto gráficamente
En la siguiente pantalla introduciremos el usuario y la contraseña de acceso:
Usuario y contraseña
En la siguiente imagen se ve como el sistema remoto está montado como un disco duro local:
Sistema remoto montado con SSHFS
3.- MONTAR SISTEMAS REMOTOS GNU/LINUX DESDE OTRO GNU/LINUX
Para montar un sistema de ficheros remoto a través de SSH nen un cliente GNU/Linux, lo primero que debemos hacer es instalar el paquete sshfs en el equipo cliente. Para ello, si tenemos una distribución de tipo Debian/Ubuntu asada en paquetes *.deb, ejecutaremos el siguiente comando:
raul@debian:~$ sudo apt-get install sshfs
Si estamos usando una versión de tipo RedHat/CentOS con paquetes rpm, ejecutaremos:
raul@rhel:~$ sudo yum install sshfs
Una vez instalado el paquete sshfs, crearemos un directorio en el cual vamos a montar el sistema de ficheros remoto. En este ejemplo, vamos a acceder a una máquina remota con el usuario juan, por tanto, crearemos un directorio en el $HOME de nuestro usuario con un nombre identificativo, en este ejemplo juan_remote:
raul@debian:~$ mkdir juan_remote
Para montar al directorio remoto en el directorio local, ejecutaremos sshfs con la siguiente sintaxis:
raul@debian:~$ sshfs [usuario]@[equipo_remoto]:[directorio_remoto] [directorio_local]
En nuestro ejemplo, para montar el directorio remoto /home/juan el equipo remoto 192.168.1.47 con el usuario juan en el directorio local $HOME/juan_remote/ , ejecutaremos el siguiente comando:
raul@debian:~$ sshfs Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/juan juan_remote
The authenticity of host '192.168.1.47 (192.168.1.47)' can't be established.
ECDSA key fingerprint is SHA256:GkfgiMrh2sfhdMxG0hvYJTr+yWlxjt5XB2fiELL3YDI.
Are you sure you want to continue connecting (yes/no)? yes
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.'s password:
Para comprobar que el directorio ha sido correctamente montado, ejecutaremos el comando "df" para ver el recurso montado. En nuestro ejemplo sale correctamente montado y para acceder a su contenido, tan solo deberemos acceder a $HOME/raul/juan_remote:
raul@debian:~$ df -h
S.ficheros Tamaño Usados Disp Uso% Montado en
udev 475M 0 475M 0% /dev
tmpfs 99M 5,7M 94M 6% /run
/dev/sda1 6,9G 5,6G 927M 87% /
tmpfs 494M 8,0K 494M 1% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 494M 0 494M 0% /sys/fs/cgroup
tmpfs 99M 4,0K 99M 1% /run/user/109
tmpfs 99M 0 99M 0% /run/user/1000
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/juan 6,9G 5,6G 927M 87% /home/raul/juan_remote
tmpfs 99M 0 99M 0% /run/user/1003
4.- SSHFS vs NFS
Aunque en un entorno empresarial es más recomendable el uso de NFS, SSHFS puede ser útil en entorno doméstico ya que nos ahorra tiepmo de configuración de SAMBA o NFS. A continuación se describe el rendimiento de SSHFS, NFS y otros sistemas de ficheros:
Rendimiento secuencial:
Lectura:
Lectura secuencial (Jake's Blog)
Escritura:
Escritura secuencial (Jake's Blog)
Rendimiento aleatorio:
Lectura:
Lectura aleatoria (Jake's Blog)
Escritura:
Escritura aleatoria (Jake's Blog)
Mundo Real:
Una prueba en el mundo real de un Rsync de 1,7GB de datos con 2929 ficheros:
Lectura Rsync (Jake's Blog)
Escritura Rsync (Jake's Blog)
Las imágenes y los resultados han sido generados por: Jake's Blog tras concederme autorización para usarlos en mi Blog.
ENJOY!