Een lokaal Shell-script uitvoeren op een externe SSH-server

0
150

Het probleem met het uitvoeren van opdrachten via SSH is dat u over het algemeen ofwel moet typen ze zelf of upload een scriptbestand. Met een beetje bash-kennis kun je echter hele scripts via SSH doorgeven zonder dat het .sh-bestand op de externe computer staat.

De oplossing: Pass De Script Over Standard Input

Het SSH-commando heeft een modus waarin u elk afzonderlijk commando op een externe server kunt uitvoeren. Om meerdere commando's uit te voeren, moet je de volgende hack gebruiken:

ssh user@remotehost 'bash -s' < script.sh

Het bash -s commando betekent “voer de volgende commando's uit in een nieuwe bash-sessie.” De vlag -s zorgt ervoor dat het wordt gelezen vanaf standaardinvoer en de < script.sh bit zal een lokaal scriptbestand inlezen in standaardinvoer.

Het bestand wordt volledig lokaal gelezen en alles wordt naar de externe server gestuurd zonder iets te uploaden. Hiervoor moet u wel alle opdrachten in een apart scriptbestand plaatsen.

Veel externe opdrachten uitvoeren in een script

Als u in plaats daarvan een deel van een shellscript op een andere server wilt uitvoeren, maar niet het hele ding, kunt u geneste blokken zoals de volgende in uw script opnemen:

ssh gebruiker@remotehost 'bash -s' <<' ENDSSH' # De volgende opdrachten worden uitgevoerd op de externe host echo “test” cd /home/pwd ENDSSH-advertentie

Dit werkt omdat bash -s elke vorm van standaardinvoer verwacht. De <<'ENDSSH'-richtlijn maakt een “hier-document” structuur, waarbij in feite alle tekens tussen het en het einde “ENDSSH” naar standaardinvoer, en dus naar de externe host via SSH.

Als je het op deze manier doet, kun je alles in één scriptbestand bewaren, in plaats van een nieuw scriptbestand te maken om op de externe te draaien.