Een lokaal script uitvoeren op een externe Linux-server

Een lokaal script uitvoeren op een externe Linux-server
fatmawati achmad zaenuri/Shutterstock.com

Het scripten van repetitieve taken verbetert de efficiëntie van het systeembeheer. Dat is geweldig voor lokale machines, maar wat als u toezicht houdt op externe servers? Kun je rennen lokaal script op een op afstand computer? Ja!

Externe verbindingen

Systeembeheer op afstand omvat meestal het maken van een verbinding met de externe computer via een secure shel verbinding. De SSH-verbinding biedt u een opdrachtprompt op de externe computer. U kunt dan meteen doorgaan en het systeemonderhoud uitvoeren dat nodig is.

Shell-scripting helpt door u een reeks opdrachten in een script te laten wikkelen dat kan worden uitgevoerd alsof het een programma is, waarbij veel acties worden gecombineerd in één opdrachtregelinstructie.

Naarmate de tijd verstrijkt, ga je je scripts aanpassen en verbeteren. Als u veel externe machines moet beheren, is het lastig om de kopie van elk script op elke server up-to-date en actueel te houden, en een vervelende overhead. Het wordt een administratieve taak op zich en vreet aan de tijdwinst die het gebruik van scripts zou moeten opleveren.

De ideale oplossing zou zijn om je scripts op je lokale machine te laten staan ​​en ze op de externe computers uit te voeren via de SSH-verbinding. Dat zou je een vereenvoudigd beheer geven met een gecentraliseerde verzameling scripts, en hetzelfde up-to-date script draait op alle computers.

Bash en SSH bieden een manier om precies dat te doen.

Wachtwoordloze SSH-verbindingen

De beste manier om dit te doen is met wachtwoordloze verbindingen, met behulp van SSH-sleutels. Door SSH-sleutels op uw lokale computer te genereren en deze naar elk van de externe computers te verzenden, kunt u veilig en gemakkelijk verbinding maken met de externe computers, zonder dat u elke keer om een ​​wachtwoord wordt gevraagd.

SSH-sleutels maken en installeren vanuit de Linux Shell

VERWANTSSH-sleutels maken en installeren vanuit de Linux Shell

Hoewel ze voor nieuwe gebruikers intimiderend kunnen zijn, zijn SSH-sleutels echt niet moeilijk. Ze zijn eenvoudig te genereren, eenvoudig te installeren op de externe servers en probleemloos wanneer u ze met SSH gebruikt. De enige vereisten zijn dat de externe computers de SSH-daemon hebben sshd actief is en dat u een gebruikersaccount hebt op de externe computer.

Als u al systeembeheer op afstand uitvoert, moet aan beide vereisten al zijn voldaan.

Om een ​​SSH-sleutelpaar te genereren, typt u:

ssh-keygen

Als je een account hebt met de naam “dave” op een computer met de naam “fedora-36.local”, kun je je openbare SSH-sleutel ernaartoe sturen en installeren met dit commando:

ssh-copy-id dave@fedora-36.local

Als u nu op de gebruikelijke manier een SSH-verbinding maakt, wordt u geverifieerd met behulp van de SSH-sleutels. U wordt op een opdrachtprompt op de externe server geplaatst zonder dat u om een ​​wachtwoord wordt gevraagd.

ssh dave@fedora-36.local

Een lokaal script op afstand uitvoeren

Voor deze tests is onze externe server een Linux-computer genaamd “fedora-36.local”. We hebben SSH-sleutels ingesteld en we hebben onze wachtwoordloze verbinding met de externe server vanaf onze lokale computer getest.

Ons script is heel eenvoudig. Het schrijft een tijdstempel in een bestand met de naam “timestamp.txt”, op de externe server. Merk op dat het script eindigt met het exit-commando. Dit is belangrijk, op sommige oudere systemen is het mogelijk dat een script volledig wordt uitgevoerd, maar de SSH-verbinding wordt open gehouden.

#!/bin/bash

date >> timestamp.txt

exit 0

Kopieer deze tekst naar een editor, sla hem op als “local.sh” en gebruik dan chmod om het uitvoerbaar te maken.

chmod +x local.sh

chmod gebruiken om een ​​script uitvoerbaar te maken

Op onze lokale computer starten we het script als volgt:

ssh dave@fedora-36.local 'bash -s' < local.sh

een lokaal script starten om op een externe server te draaien via SSH

Hier is hoe dit werkt.

  • ssh dave@fedora-36.local: De SSH-verbinding die we maken met de externe machine. Dit maakt gebruik van de ssh opdracht, het reeds bestaande gebruikersaccount op de externe server en het adres van de externe server.
  • ‘bash -s’: Dit zorgt ervoor dat Bash opdrachten leest van de standaard invoerstroom. Het laat Bash omgeleide of doorgesluisde invoer lezen.
  • < local.sh: We leiden het script om naar Bash.

Wanneer het script wordt uitgevoerd, keren we terug naar de opdrachtprompt van de lokale machine. Als we naar onze externe machine springen, kunnen we cat gebruiken om in het bestand “timestamp.txt” te kijken.

cat timestamp.txt

We kunnen het tijdstempel van de laatste en momenteel enige verbinding zien. Door het lokale script nog een paar keer uit te voeren, worden overeenkomstige tijdstempels aan het externe bestand toegevoegd.

cat timestamp.txt

In een echte situatie zou je script natuurlijk iets nuttigers doen. Maar zelfs ons triviale voorbeeld laat zien dat een lokaal script wordt uitgevoerd op een externe server.

Argumenten doorgeven aan het script

U kunt opdrachtregelargumenten doorgeven aan het script. We zullen ons script aanpassen om drie opdrachtregelparameters te verwachten. Deze worden samen met de tijdstempel omgeleid naar het bestand “timestamp.txt”.

Sla dit script op als “local2.sh” en maak het uitvoerbaar met chmod.

#!/bin/bash

echo "$1 $2 $3" >> timestamp.txt
date >> timestamp.txt

exit 0

De opdracht die we moeten gebruiken is vergelijkbaar met het vorige voorbeeld, met een paar wijzigingen.

ssh dave@fedora-36.local "bash -s" -- < local2.sh "How-To Geek" "Linux" "Articles"

een lokaal script starten met opdrachtregelparameters om via SSH op een externe server te draaien

Het dubbele koppelteken “--” vertelt Bash dat wat volgt niet moet worden beschouwd als opdrachtregelparameters voor de ssh opdracht. De drie parameters voor het script volgen zoals gebruikelijk de scriptnaam. Merk op dat we een backslash hebben gebruikt “” om te ontsnappen aan de spatie in de parameter “How-To Geek”.

We kunnen controleren met cat dat onze parameters correct zijn ontvangen en afgehandeld op de externe server.

cat timestamp.txt

Controleren of de parameters voor het script correct zijn ontvangen en verwerkt op de externe server

Een sectie van een script op afstand uitvoeren

Als u een script heeft dat enige lokale verwerking moet uitvoeren om te bepalen welke acties mogelijk vereist zijn op de externe servers, kunt u een sectierecht aan dat script toevoegen om de externe acties voor u uit te voeren.

Hoe "Here Documents" te gebruiken in Bash op Linux

VERWANTHoe “Here Documents” te gebruiken in Bash op Linux

Dit kunnen we bereiken door hier documenten te gebruiken. Hier stellen documenten ons in staat om regels van een gelabeld gedeelte van een script om te leiden naar een commando. Lokale verwerking kan zowel boven als onder het hier document worden uitgevoerd.

Dit is script “local3.sh”, dat een hier-document bevat.

#!/bin/bash

# local processing can done here

# remote processing is done here
ssh -T dave@fedora-36.local << _remote_commands

# commands to be run remotely would be added here
cd /home/dave/Documents
# etc.

# Finally, update the timestamp file
echo "Script3.sh:" $(date) >> /home/dave/timestamp.txt

# this is the label that marks the end of the redirection
_remote_commands

# more local processing can be done here

exit 0

We gebruiken de ssh commando met dezelfde verbindingsdetails als voorheen. We maken verbinding als gebruiker “dave” op een externe server genaamd “fedora-36.local”. We gebruiken ook de -T (uitschakelen pseudo-terminaltoewijzing) optie. Dit voorkomt dat de externe server een interactieve terminal voor deze verbinding levert.

De omleiding “<<” wordt gevolgd door de naam van a label. In dit voorbeeld gebruiken we ‘_remote_commands’. Er is niets bijzonders aan dit label, het is gewoon een label.

Alle opdrachten die op de regels verschijnen volgend de omleiding wordt via de SSH-verbinding verzonden. De omleiding stopt wanneer het label wordt aangetroffen. De uitvoering van het script gaat dan verder met de regel die volgt op het label.

Laten we ons gemengde script voor lokale/externe verwerking uitvoeren.

./local3.sh

Script3.sh starten met een mix van lokale en externe verwerking

Zoals verwacht zien we een nieuw item in het bestand “timestamp.txt”.

cat timestamp.txt

Vergroot uw bereik

De mogelijkheid om scripts op afstand uit te voeren, die lokaal worden geschreven, opgeslagen en onderhouden, biedt een handige beheertool. Wetende dat exact dezelfde versie van een script op al uw externe servers draait, maakt het beheer veel eenvoudiger.

Nieuwste artikelen

Gerelateerde artikelen