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.
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.
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
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 grupo‘johndoe’. 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.
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
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.
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