
Objetivo:
La finalidad de este artículo es poder compartir archivos mediante sshfs, de distintas formas, incluyendo el uso de unidades de Systemd para montaje y automontaje usando “.mount” y “.automount”.
El objetivo es que la máquina servidor brinde archivos en un volumen que se monte y se desmonte automáticamente, cuando el cliente haga la petición. Y para ello hay que configurar sshfs en el escenario, de tal forma que el cliente pueda montar el sistema de archivos remoto usando sshfs y systemd. La validación del usuario se realizará mediante clave pública/privada.
-
1. Monta manualmente el sistema de archivos remoto.
-
2. Monta el sistema de archivos remoto de forma automática, mediante fichero /etc/fstab.
-
3. Monta el sistema de archivos remoto de forma automática, mediante fichero unidad .mount
-
4. Monta el sistema de archivos remoto de forma automática, mediante fichero unidad .mount creado en el punto 3 y crea un fichero unidad de automontaje. unidad.automount, para que se monte automáticamente cuando detecte peticiones al sistema de archivos remoto y se desmonte automáticamente transcurrido un tiempo.
Preparación del escenario:
He utilizado dos instancias en OpenStack (aunque con máquinas en local también sirve), basadas en Debian 12:
Servidor: "pruebas" con la ip 172.22.201.59. Cliente: "pruebas2" que tiene la ip 172.22.200.214
En el servidor pruebas, he anexado un volumen de 2GB (tamaño de ejemplo, modificar según la necesidad).
Empezamos!
El primer paso es instalar sshfs en ambas máquinas con:
sudo apt install sshfs
En pruebas2: Genero una clave ssh y la copio al servidor:
ssh-keygen -t rsa -b 2048
ssh-copy-id debian@172.22.201.59

1. Monta manualmente el sistema de archivos remoto.
He creado un directorio en pruebas2 en ~/mnt/remoto. El directorio compartido de pruebas es /mnt/prueba que contiene algunos archivos de muestra. Al introducir el comando ya aparecen en la maquina cliente.
mkdir -p ~/mnt/remoto
sshfs debian@172.22.201.59:/mnt/prueba ~/mnt/remoto

2. Monta el sistema de archivos remoto de forma automática, mediante fichero /etc/fstab.
Para esta parte consiste en declarar en el archivo /etc/fstab de la maquina pruebas2 que es el cliente, los datos de la máquina pruebas que es el servidor. Luego para que no aparezca el error read: Connection reset by peer, hay que ir en el servidor pruebas al archivo de configuración de ssh /etc/ssh/sshd_config y comprobar que estas líneas están activadas:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes
De esta forma se garantiza que me pueda conectar al menos a la máquina de formas distintas ya sea por contraseña o por claves.
Hecho esto, en la máquina cliente pruebas2 hay que ir al archivo /etc/fstab y añadir la siguiente linea:
debian@172.22.201.59:/mnt/prueba /home/debian/mnt/remoto fuse.sshfs _netdev,IdentityFile=/home/debian/.ssh/id_rsa,allow_other 0 0
Nota: es un comando de montaje en el cual se le especifica tambien donde esta la clave privada.
Ahora para recargar y comprobar que se ha realizo el montaje:
sudo systemctl daemon-reload
sudo mount -a
Hecho esto, ahora al hacer un ls del directorio montado con la unidad que cree antes parada, funciona mediante fstab:


3. Monta el sistema de archivos remoto de forma automática, mediante fichero unidad .mount
En pruebas2 creo una unidad .mount de systemd en el archivo /etc/systemd/system/home-debian-mnt-remoto.mount con el siguiente contenido:
[Unit] Description=Montaje SSHFS de /mnt/prueba desde pruebas After=network-online.target Wants=network-online.target [Mount] What=debian@172.22.201.59:/mnt/prueba Where=/home/debian/mnt/remoto Type=fuse.sshfs Options=_netdev,IdentityFile=/home/debian/.ssh/id_rsa,allow_other [Install] WantedBy=multi-user.target
Para que se aplique hay que recargar systemd e iniciar la nueva unidad recien creada (tambien l e he modificado los permisos a la clave):
sudo systemctl daemon-reload
chmod 600 /home/debian/.ssh/id_rsa
sudo systemctl daemon-reload
sudo systemctl start home-debian-mnt-remoto.mount
sudo systemctl status home-debian-mnt-remoto.mount
Y si queremos dejarla permanente a reinicios:
sudo systemctl enable home-debian-mnt-remoto.mount

Como se ve tambien funciona por systemd:

4. Monta el sistema de archivos remoto de forma automática, mediante fichero unidad .mount creado en el punto 3 y crea un fichero unidad de automontaje. unidad.automount, para que se monte automáticamente cuando detecte peticiones al sistema de archivos remoto y se desmonte automáticamente transcurrido un tiempo.
Antes de nada, lee he indicado que busque en el .ssh del usuario debian, porque por defecto, estaba cargandolo del usuario root.
La nueva unidad mount tiene este contenido:
[Unit] Description=Montaje SSHFS de /mnt/prueba desde pruebas After=network-online.target Wants=network-online.target [Mount] What=debian@172.22.200.214:/mnt/prueba Where=/home/debian/mnt/remoto Type=fuse.sshfs Options=_netdev,IdentityFile=/home/debian/.ssh/id_rsa,allow_other,uid=1000,gid=1000,UserKnownHostsFile=/home/debian/.ssh/known_hosts,x-systemd.idle-timeout=10s [Install] WantedBy=multi-user.target
Y la unidad automount:
[Unit] Description=Automontaje SSHFS de /mnt/prueba desde pruebas After=network-online.target Wants=network-online.target [Automount] Where=/home/debian/mnt/remoto TimeoutIdleSec=10s [Install] WantedBy=multi-user.target
Nota: Con el parámetro TimeoutIdleSec, se le indica cuánto tiempo permanecerá la unidad montada, para luego desmontarse automáticamente.
Al terminar de crear las unidades hay que:
sudo systemctl daemon-reload sudo systemctl restart home-debian-mnt-remoto.automount
Ahora como la unidad se debe montar sola cada vez que un usuario entre al directorio compartido he hecho un ls para que se vea que se monta. He creado un nuevo archivo de prueba llamado andres3probando que se ve como aparece ya en el servidor.

Aquí se muestra como las dos unidades están funcionando: (ambas unidades las he dejado en enabled para posibles reinicios)

Ahora se ve como se monta solamente cuando se necesita y pasados los 10 segundos se desmonta:

Al parar las unidades mount y automount, para que vuelva a funcionar hay que arrancar la unidad de automount solamente, si se arranca la mount primero y luego la automount dará error como se ve en la imagen, el proceso correcto es arrancar la unidad de automount y ya vuelve a funcionar.

De esta forma es posible compartir archivos mediante el uso de unidades de Systemd. Hay que tener especial cuidado si se cambia la forma de hacerlo de las 4, y recordar el orden correcto de arranque de las unidades que menciono más arriba.