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 netop til dette scenarie. Dette bibliotek giver dig mulighed for at udføre shell-kommandoer på en fjernserver, der kun tilbyder (S)FTP- og HTTP-adgang. Tricket er, at et PHP-script midlertidigt uploades, som udfører de givne kommandoer og returnerer outputtet. Alt dette sker i baggrunden, men føles som en rigtig shell.

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

Dernæst opretter vi en .env-fil med (S)FTP-adgangsdataene.:

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 worker i baggrunden, udfører kommandoen lokalt på serveren (hvor den er hurtig) og returnerer resultatet. Dette muliggør effektiv automatisering af implementeringer, databasedumps eller Git-operationer, selv i begrænsede hostingmiljøer. Det integreres også problemfrit med syncdb til databasesynkronisering.

Tilbage