Cómo instalar y utilizar SSHFS en Linux

SSHFS (SSH File System) es una implementación de un Sistema de Archivos en el Espacio de Usuario (FUSE) que permite a los clientes montar sistemas de archivos remotos a través de una conexión SSH. SSHFS utiliza el Protocolo de Transferencia de Archivos SSH (SFTP) para montar el sistema de archivos remoto en la máquina cliente, y las conexiones entre el cliente y el servidor son seguras y están cifradas.

SSHFS puede utilizarse como alternativa al protocolo FTP tradicional. Es seguro por defecto a través de la conexión SSH y no se necesitan paquetes o configuraciones adicionales. El SSHFS funciona con una sencilla configuración SSH por defecto.

En este tutorial, aprenderás a montar un directorio remoto de forma segura utilizando el SSHFS entre dos máquinas Linux (cliente y servidor). Esta guía también incluye cómo configurar un chroot en SSHFS que impedirá a los usuarios acceder a los directorios de otros usuarios.

Requisitos previos

Para seguir esta guía, necesitarás dos máquinas Linux, un cliente y un servidor. Puedes utilizar cualquier distribución de Linux, y asegúrate de que el servidor tiene instalado un servidor OpenSSH, y de que tienes un usuario no root con los privilegios sudo root.

Instalar SSHFS en tu ordenador local

Por defecto, los paquetes de SSHFS están disponibles en la mayoría de las distribuciones de Linux, incluyendo Debian/Ubuntu, RHEL/CentOS/Rocky y ArchLinux/Manjaro. Puedes instalarlo fácilmente con el gestor de paquetes de tu sistema. En esta sección, instalarás SSHFS en tu máquina local/cliente.

Primero, actualiza tu lista de índice de paquetes ejecutando el siguiente comando.

For Debian/Ubuntu

sudo apt update

For RHEL/CentOS/RockyLinux

sudo dnf check-update

For ArchLinux/Manjaro

sudo pacman -Syu

Una vez actualizado tu índice de paquetes, instala el paquete SSHFS utilizando tu gestor de paquetes como se indica a continuación. En las distribuciones Debian y Archlinux, el paquete se llama «sshfs«, pero en las distribuciones basadas en RHEL, el paquete se llama «fuse-sshfs«.

For Debian/Ubuntu

sudo apt install sshfs

For RHEL/CentOS/RockyLinux

sudo dnf install fuse-sshfs

For ArchLinux/Manjaro

sudo pacman -S sshfs

Ahora has completado la instalación del paquete SSHFS en tu máquina local. A continuación, aprenderás el comando básico para montar y desmontar un directorio/partición remota en tu máquina local utilizando el comando SSHFS.

Básico: montar y desmontar con SSHFS

Antes de empezar con el comando SSHFS, asegúrate de que tienes un servidor Linux con OpenSSH instalado encima. Para la autentificación del usuario en el servidor, puedes utilizar la autentificación basada en la contraseña SSH o la autentificación basada en la clave SSH. Pero, puedes tener en cuenta el uso de la autenticación basada en la clave SSH, que es más segura que la autenticación basada en la contraseña.

En esta sección, aprenderás el comando básico de ‘sshfs’ para montar el directorio/partición remota desde el servidor a la máquina local/cliente. Además, aprenderás a desmontar sshfs desde la máquina local.

1. El comando básico de‘sshfs‘ para montar un directorio en la máquina local a través del protocolo SSH es el siguiente.

sshfs user@server-ip:/remote/directory /local/directory

En la práctica, monta el directorio remoto‘/srv/data‘ desde el servidor‘172.16.1.10‘ al directorio de la máquina local‘~/data‘. En este ejemplo se utiliza el usuario SSH ‘johndoe’.

sshfs [email protected]:/srv/data ~/data

Ahora se te pedirá que te autentiques con una contraseña si estás utilizando la autenticación basada en contraseña para tu SSH.

montar sshfs

Para comprobarlo, ejecuta el comando «ls» en el directorio«~/data» de la máquina local.

ls -lah ~/data

Verás una lista de archivos del servidor remoto en tu máquina local.

Verificar el directorio de montaje

2. Ahora, para desmontar el directorio remoto desde tu máquina local, ejecuta el comando ‘fusermount‘ como se indica a continuación. Este comando se utiliza para montar y desmontar sistemas de archivos FUSE.

fusermount -u ~/data

desmontar sshfs

3. Otro ejemplo del comando ‘sshfs‘ que puede interesarte.

El comando ‘sshfs’ con la opción de depuración‘-d‘. Cuando tengas problemas con el comando ‘sshfs’, utiliza la opción adicional ‘ -d ‘ para mostrar todos los mensajes de depuración al realizar una conexión con el servidor.

sshfs user@server-ip:/remote/directory /local/directory -d

Ahora, si estás ejecutando un servidor con un puerto SSH no estándar, puedes añadir la opción ‘ -p ‘ seguida de tu puerto SSH.

sshfs user@server-ip:/remote/directory /local/directory -C -p 2222

La opción ‘ -C‘ activará la compresión, equivalente a la opción ‘-ocompresión=sí’ del comando ssh.

Para una referencia completa, puedes utilizar la opción ‘–help’ o usar la página de manual de SSHFS.

sshfs --help
man sshfs

Configuración de Chroot en SSHFS

En esta sección, aprenderás a habilitar el entorno chroot en SSHFS, lo que se consigue configurando el servidor SSH y especificando el usuario y el directorio. El entorno chroot limitará el acceso al directorio, pero tu usuario seguirá pudiendo leer y escribir en el directorio de montaje.

En primer lugar, crearás un nuevo directorio chroot para tu usuario y le permitirás el acceso de lectura y escritura. En esta guía, crearás un nuevo directorio compartido ‘/srv/shared’, y luego crearás un nuevo directorio de inicio y de datos para cada usuario.

1. Ejecuta el siguiente comando para crear un nuevo directorio compartido principal ‘ /srv/shared ‘ y cambia la propiedad al usuario y grupo‘root‘.

mkdir -p /srv/shared
sudo chown -R root:root /srv/shared

2. Ahora, crea otro directorio para cada usuario bajo el directorio ‘ /srv/compartido ‘. Y asegúrate de cambiar la propiedad de ese directorio al usuario y grupo ‘root‘.

mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe

3. A continuación, crea el directorio‘data‘ dentro del directorio principal del usuario‘/srv/shared/johndoe‘. A continuación, cambia la propiedad de ese directorio al usuario ‘root y al grupojohndoe’. Por último, permite al grupo ‘johndoe‘ leer y escribir en ese directorio.

mkdir -p /srv/shared/johndoe/data
sudo chown -R root:johndoe /srv/shared/johndoe/data
sudo chmod g+rwx /srv/shared/johndoe/data

Ahora, puedes montar el directorio remoto‘/data‘, pero es equivalente al directorio‘/srv/shared/johndoe/data’ en el servidor.

configurar el directorio chroot

4. Después de haber creado el directorio chroot para tu usuario, tendrás que editar la configuración SSH ‘/etc/ssh/sshd_config’. Edítalo utilizando nano o tu editor de texto favorito.

sudo nano /etc/ssh/sshd_config

Añade las siguientes líneas al archivo.

Subsystem sftp internal-sftp
Match User johndoe 
       ChrootDirectory /srv/shared/%u
       ForceCommand internal-sftp
       AllowTcpForwarding no
       X11Forwarding no

La configuración ‘internal-sftp‘ permitirá que SSH actúe también como servidor SFTP. Luego define el‘ChrootDirectory‘ para el usuario‘johndoe‘ al directorio‘/srv/shared/%u‘. El‘%u‘ significa como nombre de usuario.

Guarda y cierra el archivo.

5. A continuación, ejecuta el siguiente comando para verificar la configuración de SSH y asegúrate de que no se producen errores de sintaxis. A continuación, reinicia el servicio SSH para aplicar la nueva configuración.

sudo sshd -t
sudo systemctl restart sshd

6. Ahora, vuelve a la máquina cliente/local, y monta el directorio remoto en el entorno chroot. Debes utilizar el directorio ‘/data’, en lugar del directorio de ruta completa ‘/srv/shared/johndoe/data’. Y tienes los privilegios de lectura, escritura y ejecución en el directorio ‘data’.

sshfs user@server-ip:/data ~/data

Para verificar el acceso de escritura, crea un nuevo archivo en tu máquina cliente utilizando el siguiente comando.

cd ~/data
echo "This file from client machine" >> another-file.md

Escritura de la prueba

Ahora, de vuelta al servidor, navega al directorio‘/srv/shared/johndoe/data‘, comprueba el archivo disponible en ese directorio.

cd /srv/shared/johndoe/data/
ls

cat another-file.md

Verás el archivo que acabas de crear desde la máquina cliente.

Verificar el archivo en el servidor

En esta sección, has creado el directorio chroot para los usuarios de SSHFS y has configurado el servicio SSH para habilitar el chroot.

Solución de problemas

Si obtienes un error en la conexión SSHFS, puedes solucionar el problema de la conexión de las siguientes maneras.

Puedes utilizar el modo de depuración con la opción‘-d’. Con esta opción, verás los registros de tu conexión en tu terminal de shell.

Ejecuta el comando‘sshfs‘ con el modo de depuración como se indica a continuación.

sshfs user@server-ip:/data ~/mnt -d

Otra forma que puedes probar es comprobar el registro SSH de tu servidor. Antes de utilizar el comando ‘sshfs’, abre un nuevo terminal y conéctate a tu servidor, luego ejecuta el comando‘tail‘ para comprobar el servicio de registro SSH.

En los sistemas basados en Ubuntu/Debian, el registro SSH está disponible en‘/var/log/auth.log‘. Y en los sistemas basados en RHEL/CentOS, el registro SSH está disponible en ‘/var/log/secure‘.

For Ubuntu/Debian

tail -f /var/log/auth.log

For RHEL/CentOS

tail -f /var/log/secure

También te podría gustar...