Programar en un directorio remoto usando SSHFS

Programar en directorio remoto usand SSHFS

Algunas veces debido a factores externos, es necesario programar en un servidor remoto, lo cual complica un poco las cosas. Si, ya se que muchos dirán que no es el escenario adecuado, pero si no se puede evitar, tendremos que hacerlo de otra forma, es la idea para programar en un directorio remoto usando SSHFS.

Introducción

El objetivo principal de escribir este artículo es proporcionar una guía paso a paso sobre cómo montar un sistema de archivos Linux remoto utilizando el cliente SSHFS sobre SSH.

Este artículo es útil para aquellos usuarios y administradores de sistemas que desean montar un sistema de archivos remoto en sus sistemas locales para cualquier propósito. En la práctica lo hemos probado instalando un cliente SSHFS en uno de nuestros sistemas Linux y montando con éxito sistemas de archivos remotos.

Antes de continuar con la instalación, comprendamos acerca de SSHFS y cómo funciona.

Shell - Montar como usuario un directorio remoto usando SSHFS

¿Qué es SSHFS?

SSHFS es el acrónimo de Secure SHell FileSystem, el cual nos permite montar un sistema de archivos remoto en una máquina local utilizando para ello el protocolo de transferencia de archivos de SSH (SFTP).

SEFTP es un protocolo seguro de transferencia de archivos que proporciona acceso a archivos, transferencia de archivos y funciones de administración de archivos siempre a través del protocolo seguro Secure Shell (SSH). Debido a que SSH usa el cifrado de punto a punto y que SSHFS incluye un módulo de kernel llamado FUSE (Sistema de archivos en el espacio de usuario) esto nos permite que cualquier usuario no privilegiado pueda crear su sistema de archivos sin modificar el código del kernel.

Este artículo es valido solo para ordenadores basado en linux, aunque con pequeños cambios se puede usar en MacOsX,  y otros SOs  *nix.

Instalar el cliente SSHFS en nuestra computadora basada en Linux

Por defecto en algunas distribuciones como Centos/Fedora/Redhat y otras, el paquete no existe en sus repositorios oficiales, por lo que deberemos  activar el repositorio EPEL (en el caso de distribuciones basadas en redhat)

# yum install sshfs
# dnf install sshfs              [On Fedora 22+ releases]
$ sudo apt-get install sshfs     [On Debian/Ubuntu based systems]

Crear el punto de montaje en nuestro usuario

Una vez que tenemos instalado SSHFS, necesitamos crear un punto de montaje donde montaremos el punt del sistema remoto de ficheros.

mkdir ~/Sites/zero/my-app

Montar el directorio remoto con SSHFS

Una vez creado el punto de montaje, ejecutaremos el comando como usuario, para montar el directorio remoto, en nuestro punto de montaje de tal forma que el montaje y todos sus ficheros y directorios, sean propiedad de nuestro usuario y grupo.

El comando de abajo, presupone que estamos trabajando sobre un servidor remoto que:

  • usa SSH configurado en el puerto 24 en lugar del habitual 22. Si el servidor remota usa, el puerto estándar (22), no hace falta incluir -p 24. 
  • que esta configurado para usar llaves (SSH key authorization)
$ sshfs -p 24 -o uid=$(id -u),gid=$(id -g),auto_cache,reconnect  root@hostname_remoto_o_IP:/root/cpanel-api/ /home/miusuario/Sites/zero/my-app

id es un comando que nos permite obtener la información del sistema relativa al usuario sobre el que queremos obtener la información.

Paso 4: Verificar que el directorio remoto esta montado

$ ls -lisah ~/Sites/zero/my-app
total 240K

      1 4,0K drwxr-xr-x 1 abkrim abkrim 4,0K may 18 11:19 .
4064630 4,0K drwxrwxr-x 5 abkrim abkrim 4,0K may 18 12:16 ..
      8 4,0K drwxr-xr-x 1 abkrim abkrim   37 may 18 11:07 app
      9 4,0K drwxr-xr-x 1 abkrim abkrim   20 may 18 11:07 bootstrap
     10 4,0K -rw-r--r-- 1 abkrim abkrim  359 may 18 11:07 box.json
     11 4,0K -rw-r--r-- 1 abkrim abkrim 1,4K may 18 11:07 composer.json
     12 168K -rw-r--r-- 1 abkrim abkrim 168K may 18 11:20 composer.lock
     13 4,0K drwxr-xr-x 1 abkrim abkrim   91 may 18 11:07 config
     14 4,0K -rwxr-xr-x 1 abkrim abkrim 1,8K may 18 11:07 cpanel-api
     15 4,0K drwxr-xr-x 1 abkrim abkrim   18 may 18 11:07 database
      3 4,0K -rw-r--r-- 1 abkrim abkrim  234 may 18 11:07 .editorconfig
      2 4,0K drwxr-xr-x 1 abkrim abkrim 4,0K may 18 11:23 .git
      4 4,0K -rw-r--r-- 1 abkrim abkrim  175 may 18 11:07 .gitattributes
      5 4,0K -rw-r--r-- 1 abkrim abkrim   86 may 18 11:22 .gitignore
      6 4,0K -rw-r--r-- 1 abkrim abkrim 1,1K may 18 11:07 LICENSE
     16 4,0K -rw-r--r-- 1 abkrim abkrim  824 may 18 11:07 phpunit.xml.dist
      7 4,0K -rw-r--r-- 1 abkrim abkrim  238 may 18 11:07 README.md
     17 4,0K drwxr-xr-x 1 abkrim abkrim   79 may 18 11:07 tests
     18 4,0K drwxr-xr-x 1 abkrim abkrim 4,0K may 18 11:21 vendor
$ df -h | grep my-app
root@my_hostname_remoto:/root/cpanel-api/   397G   318G   80G  80% /home/abkrim/Sites/zero/my-app

Montaje permanente como usuario

No suelo usar montajes permanentes de este tipo por cuestiones obvias, ya que estoy montando en local un directorio root. Ademas existen algunas cuestiones sobre seguridad al respecto. Yo prefiero crear un alias en mi entrada de zshrc.

Pero si queremos añadir el montaje de nuestros directorio remoto con SSHFS, deberemos acudir a la edición del fichero /etc/fstab. El contenido de abajo es para este escenario, es decir, el montaje de una unidad remota, mediante SSHFS, con llave SSH, en un puerto diferente al habitual.

root@hostname_remoto:/root/cpanel-api/ /home/user/Sites/zero/my-app fuse.sshfs  x-systemd.automount,_netdev,users,idmap=user,identityfile=/home/user/.ssh/id_rsa,uid=1000,gid=1000,port=24,allow_other,reconnect 0 0

Enlaces interesantes

Recomendaciones

Es recomendable durante las prubeas si obtienes errores del tipo «reset by peer» o sin mensaje pero que no monta, taner un tail al fichero de logs del subsistema de SSH, para ver la respuesta del servidor.

Agradecimientos

Por la foto de Caspar Camille Rubin on Unsplash

Comparte este articulo en

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *