Git utan SSH

Vem har inte upplevt detta: Du behöver snabbt ladda ner något på ett billigt delat webbhotellspaket (t.ex. från IONOS). git pull Du kanske vill köra ett program eller använda en databas, men din webbhotellleverantör ger inte SSH-åtkomst – eller bara i dyrare abonnemang. Ofta är det enda alternativet som återstår den mödosamma processen att manuellt ladda upp filer via FTP, vilket gör distributioner onödigt komplicerade och felbenägna.


En möjlig lösning är att montera filsystemet via sshfs. I teorin låter det här bra: Du monterar fjärrmappen lokalt och arbetar som om filerna fanns på din egen maskin. För att göra detta skapar du helt enkelt en lokal katalog och ansluter den till servern via FTP/SSH-användaren. De nödvändiga kommandona för att upprätta anslutningen och förbereda Git för den här mappen ser ut så här 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: Prestandan är urusel. Eftersom Git kämpar med kommandon som git status När man utför tusentals små filoperationer, som var och en kräver nätverksåtkomst, väntar man ofta minuter på även de enklaste svaren. Produktivt arbete är praktiskt taget omöjligt under dessa omständigheter. Speciellt i projekt med många beroenden fryser terminalen ofta helt, vilket tvingar frustrerade användare att överge processen.

Bibliotek som ftpsh finns just för detta scenario. Detta bibliotek låter dig köra shell-kommandon på en fjärrserver som bara erbjuder (S)FTP- och HTTP-åtkomst. Tricket är att ett PHP-skript tillfälligt laddas upp, vilket kör de givna kommandona och returnerar utdata. Allt detta sker i bakgrunden, men känns som ett riktigt shell.

Installationen är snabb och enkel.:

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

Därefter skapar vi en .env-fil med (S)FTP-åtkomstdata.:

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

Nu kan vi köra vilka kommandon som helst på servern, förutsatt att verktygen är tillgängliga på distans.:

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

Skriptet laddar upp en arbetare i bakgrunden, kör kommandot lokalt på servern (där det är snabbt) och returnerar resultatet. Detta möjliggör effektiv automatisering av distributioner, databasdumpar eller Git-operationer, även i begränsade hostingmiljöer. Det integreras också sömlöst med syncdb för databassynkronisering.

Tillbaka