Git sin SSH

¿Quién no ha experimentado esto: necesitas descargar rápidamente algo en un paquete de alojamiento compartido barato (por ejemplo, de IONOS)? git pull Quizás quieras ejecutar un programa o usar una base de datos, pero tu proveedor de alojamiento no te da acceso SSH, o solo lo ofrece en planes más caros. A menudo, la única opción es el tedioso proceso de subir archivos manualmente por FTP, lo que complica innecesariamente las implementaciones y las hace propensas a errores.


Una posible solución alternativa es montar el sistema de archivos mediante sshfs. En teoría, esto suena bien: montas la carpeta remota localmente y trabajas como si los archivos estuvieran en tu propia máquina. Para ello, simplemente creas un directorio local y lo conectas al servidor mediante el usuario FTP/SSH. Los comandos necesarios para establecer la conexión y preparar Git para esta carpeta se ven así en Linux::

sudo apt-get install sshfs
mkdir /var/www/remote
cd /var/www/remote
sshfs username@your.host:/ -p 22 /var/www/remote
git config --global --add safe.directory /var/www/remote
git status
...
umount /var/www/remote

El problema: El rendimiento es pésimo. Dado que Git tiene dificultades con comandos como git status Al realizar miles de operaciones con archivos pequeños, cada una de las cuales requiere acceso a la red, a menudo se esperan minutos incluso para las respuestas más simples. El trabajo productivo es prácticamente imposible en estas circunstancias. Especialmente en proyectos con numerosas dependencias, la terminal se bloquea por completo con frecuencia, obligando a los usuarios frustrados a abandonar el proceso.

Bibliotecas como ftpsh existen precisamente para este escenario. Esta biblioteca permite ejecutar comandos de shell en un servidor remoto que solo ofrece acceso (S)FTP y HTTP. El truco reside en que se carga temporalmente un script PHP que ejecuta los comandos dados y devuelve el resultado. Todo esto ocurre en segundo plano, pero se siente como un shell real.

La instalación es rápida y sencilla.:

mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh

A continuación, creamos un archivo .env con los datos de acceso (S)FTP.:

HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"

Ahora podemos ejecutar cualquier comando en el servidor, siempre que las herramientas estén disponibles de forma remota.:

ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql

El script carga un trabajador en segundo plano, ejecuta el comando localmente en el servidor (donde es rápido) y devuelve el resultado. Esto permite una automatización eficiente de implementaciones, volcados de bases de datos u operaciones de Git, incluso en entornos de alojamiento limitados. Además, se integra perfectamente con syncdb para la sincronización de bases de datos.

Atrás