Git uden SSH

Hvem har ikke oplevet dette: Du skal hurtigt downloade noget på en billig shared hosting-pakke (f.eks. fra IONOS). git pull Du vil måske gerne køre et program eller bruge en database, men din hostingudbyder giver ikke SSH-adgang – eller kun i dyrere abonnementer. Ofte er den eneste mulighed tilbage den besværlige proces med manuelt at uploade filer via FTP, hvilket gør implementeringer unødvendigt komplicerede og udsatte for fejl.


En mulig løsning er at montere filsystemet via sshfs. I teorien lyder det godt: Du monterer den eksterne mappe lokalt og arbejder, som om filerne var på din egen maskine. For at gøre dette skal du blot oprette en lokal mappe og forbinde den til serveren via FTP/SSH-brugeren. De nødvendige kommandoer til at etablere forbindelsen og forberede Git til denne mappe ser sådan ud under 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

Problemet: Ydeevnen er elendig. Da Git kæmper med kommandoer som git status Når man udfører tusindvis af små filoperationer, der hver især kræver netværksadgang, venter man ofte i minutter på selv de simpleste svar. Produktivt arbejde er praktisk talt umuligt under disse omstændigheder. Især i projekter med mange afhængigheder fryser terminalen ofte helt, hvilket tvinger frustrerede brugere til at opgive processen.

Biblioteker som ftpsh findes til netop dette scenarie. Biblioteket gør det muligt at udføre shell-kommandoer på en ekstern server, der kun tilbyder (S)FTP- og HTTP-adgang. Tricket: Et PHP-script uploades midlertidigt, som udfører givne kommandoer og returnerer outputtet. Det hele sker i baggrunden, men føles som en rigtig skal.

Installationen er hurtig og nem.:

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

Så lægger vi en .env med (S)FTP-adgangsdataene til:

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

Nu kan vi udføre alle kommandoer på serveren, forudsat at værktøjerne er tilgængelige eksternt.:

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

Scriptet uploader en arbejder i baggrunden, kører kommandoen lokalt på serveren (hvor den er hurtig) og returnerer resultatet. Dette gør det muligt at automatisere implementeringer, databasedumps eller Git-operationer effektivt, selv på begrænsede hostingmiljøer. For eksempel fungerer det også perfekt med syncdb til synkronisering af databaser.

Tilbage