SSHFS (SSH File System) es una implementación de un sistema de archivos en el espacio del usuario (FUSE) que permite a los clientes montar un sistema de archivos remoto 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 cifradas.
SSHFS se puede utilizar como una alternativa al protocolo FTP tradicional. Es seguro por defecto a través de una conexión SSH y no se necesitan paquetes o configuraciones adicionales. El SSHFS funciona con una configuración SSH predeterminada simple.
En este tutorial, aprenderá cómo montar un directorio remoto de forma segura utilizando SSHFS entre dos máquinas Linux (cliente y servidor). Esta guía también incluye cómo configurar chroot en SSHFS que evitará que los usuarios accedan a los directorios de otros usuarios.
Requisitos
Para seguir esta guía, necesitará dos máquinas Linux, un cliente y un servidor. Puede usar cualquier distribución de Linux y asegurarse de que el servidor tenga un servidor OpenSSH instalado y que tenga un usuario que no sea root con los privilegios de sudo root.
Instalando SSHFS en su computadora local
De forma predeterminada, SSHFS Los paquetes están disponibles en la mayoría de las distribuciones de Linux, incluidas Debian/Ubuntu, RHEL/CentOS/Rocky y ArchLinux/Manjaro. Puede instalarlo fácilmente usando el administrador de paquetes de su sistema. En esta sección, instalará SSHFS en su máquina local/cliente.
Primero, actualice su 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
Después de actualizar el índice de su paquete, instale el paquete SSHFS usando su administrador de paquetes como se muestra a continuación. En la distribución Debian y Archlinux, el paquete se llama 'sshfs ', pero en la distribución basada 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 ha completado la instalación del paquete SSHFS en su máquina local. A continuación, aprenderá el comando básico para montar y desmontar un directorio/partición remoto en su máquina local mediante el comando SSHFS.
Básico:Montar y Desmontar usando SSHFS
Antes de comenzar con el comando SSHFS, asegúrese de tener un servidor Linux con OpenSSH instalado habilitado encima. Para la autenticación del usuario en el servidor, puede utilizar la autenticación basada en contraseña SSH o la autenticación basada en clave SSH. Sin embargo, puede tener en cuenta el uso de autenticación basada en clave SSH, que es más segura que la autenticación basada en contraseña.
En esta sección, aprenderá el comando básico de 'sshfs' para montar un directorio/partición remota desde el servidor a la máquina local/cliente. Además, aprenderá cómo desmontar sshfs de su 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 se encuentra a continuación.
sshfs [email protected]:/remote/directory /local/directory
En la práctica, monte el directorio remoto '/srv/data ' del servidor '172.16.1.10 ' al directorio de la máquina local '~/data '. Este ejemplo usa el usuario SSH 'johndoe'.
sshfs [email protected]:/srv/data ~/data
Ahora se le solicitará la autenticación de contraseña si está utilizando la autenticación basada en contraseña para su SSH.
Para verificar, ejecute el comando 'ls' en el directorio '~/data ' en la máquina local.
ls -lah ~/data
Verá una lista de archivos del servidor remoto en su máquina local.
2. Ahora, para desmontar el directorio remoto de su máquina local, ejecute el comando 'fusermount ' como a continuación. Este comando se usa para montar y desmontar sistemas de archivos FUSE.
fusermount -u ~/data
3. Otro ejemplo de 'sshfs ' Comando que te puede interesar.
El comando 'sshfs' con la opción de depuración '-d '. Siempre que tenga problemas con el comando 'sshfs', use la opción adicional '-d' para mostrar todos los mensajes de depuración al establecer una conexión con el servidor.
sshfs [email protected]:/remote/directory /local/directory -d
Ahora, si está ejecutando un servidor con un puerto SSH no estándar, puede agregar la opción '-p' seguido de su puerto SSH.
sshfs [email protected]:/remote/directory /local/directory -C -p 2222
La opción '-C ' habilitará la compresión, equivalente a la opción '-o compresión=yes' en el comando ssh.
Para obtener una referencia completa, puede usar 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á cómo habilitar chroot en SSHFS, lo que se puede lograr configurando el servidor SSH y especificando el usuario y el directorio. El entorno chroot limitará el acceso al directorio, pero su usuario aún puede leer y escribir en el directorio de montaje.
1. Primero, creará un nuevo directorio chroot para su usuario y permitirá el acceso de lectura y escritura. En esta guía, creará un nuevo directorio compartido '/srv/shared', luego creará un nuevo directorio de inicio y un directorio de datos para cada usuario.
Ejecute el siguiente comando para crear un nuevo directorio compartido principal '/srv/shared' y cambie la propiedad al usuario y grupo 'raíz '.
mkdir -p /srv/shared
sudo chown -R root:root /srv/shared
2. Ahora, cree otro directorio para cada usuario en '/srv/shared' directorio. Y asegúrese de cambiar la propiedad de ese directorio al usuario y grupo 'raíz '.
mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe
3. A continuación, cree los 'datos ' dentro del directorio de inicio del usuario '/srv/shared/johndoe '. Luego cambie la propiedad de ese directorio al usuario 'root ' y el grupo 'johndoe '. Por último, permita que el grupo 'johndoe ' para 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, puede 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 su usuario, deberá editar la configuración SSH '/etc/ssh/sshd_config'. Edítalo usando nano o tu editor de texto favorito.
sudo nano /etc/ssh/sshd_config
Agregue 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 también actúe como un servidor SFTP. Luego defina el 'ChrootDirectory ' para el usuario 'johndoe ' al '/srv/shared/%u 'directorio. El '%u ' significa como nombre de usuario.
Guarde y cierre el archivo.
5. A continuación, ejecute el siguiente comando para verificar la configuración de SSH y asegúrese de no obtener errores de sintaxis. Luego reinicie el servicio SSH para aplicar una nueva configuración.
sudo sshd -t
sudo systemctl restart sshd
6. Ahora, regrese al cliente/máquina local, luego monte el directorio remoto en el entorno chroot. Debe usar el directorio '/data', en lugar del directorio de ruta completo '/srv/shared/johndoe/data'. Y tiene los privilegios para leer, escribir y ejecutar en el directorio 'datos'.
sshfs [email protected]:/data ~/data
Para verificar el acceso de escritura, cree un nuevo archivo en su máquina cliente usando el siguiente comando.
cd ~/data
echo "This file from client machine" >> another-file.md
Ahora, regrese al servidor, navegue hasta el directorio '/srv/shared/johndoe/data ', verifique el archivo disponible en ese directorio.
cd /srv/shared/johndoe/data/
ls
cat another-file.md
Verá el archivo que acaba de crear desde la máquina cliente.
En esta sección, creó el directorio chroot para los usuarios de SSHFS y configuró el servicio SSH para habilitar chroot.
Solución de problemas
Si obtiene un error en la conexión SSHFS, puede solucionar su conexión de las siguientes maneras.
Puede usar el modo de depuración con la opción '-d' . Con esta opción, verá registros de su conexión en su terminal shell.
Ejecute el 'sshfs ' comando con el modo de depuración como se muestra a continuación.
sshfs [email protected]:/data ~/mnt -d
Otra forma de intentarlo es revisando el registro SSH en su servidor. Antes de usar el comando 'sshfs', abra una nueva terminal y conéctese a su servidor, luego ejecute 'tail ' Comando para verificar el servicio de registro SSH.
En el sistema basado en Ubuntu/Debian, el registro de SSH está disponible en '/var/log/auth.log '. Y para el sistema basado en RHEL/CentOS, el registro de SSH está disponible en '/var/log/secure' .
# For Ubuntu/Debian
tail -f /var/log/auth.log
# For RHEL/CentOS
tail -f /var/log/secure
Conclusión
¡Felicidades! Ahora ha aprendido a usar SSHFS para montar un directorio remoto desde el servidor a su máquina local. Además, aprendió cómo configurar el entorno chroot en SSHFS y cómo solucionar los problemas de su conexión SSHFS.