Cum să rulați un script local pe un server Linux la distanță
Publicat: 2022-09-10Scriptarea sarcinilor repetitive îmbunătățește eficiența administrării sistemului. Este grozav pentru mașinile locale, dar ce se întâmplă dacă supravegheați serverele de la distanță? Puteți rula un script local pe un computer la distanță ? Da!
Conexiuni la distanță
Administrarea de la distanță a sistemului implică de obicei realizarea unei conexiuni la computerul de la distanță printr- o conexiune shell sigură. Conexiunea SSH vă oferă un prompt de comandă pe computerul de la distanță. Apoi puteți continua și efectua orice întreținere a sistemului este necesară.
Scriptul Shell vă ajută, permițându-vă să includeți o secvență de comenzi într-un script care poate fi rulat ca și cum ar fi un program, combinând multe acțiuni într-o singură instrucțiune de linie de comandă.
Pe măsură ce trece timpul, îți vei modifica și îmbunătăți scripturile. Dacă aveți multe mașini la distanță de administrat, păstrarea copiei fiecărui script de pe fiecare server la zi și la zi este o durere și o suprasolicitare supărătoare. Devine o sarcină administrativă în sine și consumă economiile de timp pe care se presupune că le oferă utilizarea scripturilor.
Soluția ideală v-ar permite să vă păstrați scripturile pe mașina locală și să le rulați pe computerele de la distanță prin conexiunea SSH. Acest lucru vă va oferi o gestionare simplificată cu o colecție centralizată de scripturi și același script actualizat rulează pe toate computerele.
Bash și SSH oferă o modalitate de a face exact asta.
Conexiuni SSH fără parolă
Cel mai bun mod de a face acest lucru este cu conexiuni fără parolă, folosind chei SSH. Prin generarea de chei SSH pe computerul dvs. local și trimiterea acestora către fiecare dintre computerele de la distanță, vă puteți conecta la computerele de la distanță în mod sigur și convenabil, fără a vi se cere o parolă de fiecare dată.
Deși pot fi intimidante pentru utilizatorii începători, cheile SSH nu sunt chiar dificile. Sunt ușor de generat, simplu de instalat pe serverele de la distanță și fără fricțiuni atunci când le utilizați cu SSH. Singurele cerințe preliminare sunt ca computerele de la distanță să aibă demonul SSH sshd
care rulează și să aveți un cont de utilizator pe computerul de la distanță.
Dacă faceți deja administrarea de la distanță a sistemului, ambele cerințe trebuie să fie deja îndeplinite.
Pentru a genera o pereche de chei SSH, tastați:
ssh-keygen
Dacă aveți un cont numit „dave” pe un computer numit „fedora-36.local”, puteți trimite și instala cheia publică SSH la acesta cu această comandă:
ssh-copy-id [email protected]
Acum, realizarea unei conexiuni SSH în mod obișnuit se va autentifica folosind cheile SSH. Sunteți aruncat pe un prompt de comandă de pe serverul de la distanță fără a vi se cere o parolă.
ssh [email protected]
Rularea unui script local de la distanță
Pentru aceste teste, serverul nostru la distanță este un computer Linux numit „fedora-36.local”. Am configurat chei SSH și ne-am testat conexiunea fără parolă la serverul de la distanță de pe computerul nostru local.
Scriptul nostru este foarte simplu. Acesta scrie un marcaj de timp într-un fișier numit „timestamp.txt”, pe serverul de la distanță. Rețineți că scriptul se încheie cu comanda de ieșire. Acest lucru este important, pe unele sisteme mai vechi este posibil ca un script să ruleze până la finalizare, dar conexiunea SSH este menținută deschisă.
#!/bin/bash data >> timestamp.txt iesirea 0
Copiați acest text într-un editor, salvați-l ca „local.sh”, apoi utilizați chmod
pentru a-l face executabil.
chmod +x local.sh
Pe mașina noastră locală, vom lansa scriptul astfel:
ssh [email protected] 'bash -s' < local.sh
Iată cum funcționează.
- ssh [email protected] : conexiunea SSH pe care o facem la mașina de la distanță. Aceasta utilizează comanda
ssh
, contul de utilizator preexistent pe serverul la distanță și adresa serverului la distanță. - 'bash -s' : Aceasta face ca Bash să citească comenzi din fluxul de intrare standard. Îi permite lui Bash să citească intrarea redirecționată sau canalizată.
- < local.sh : redirecționăm scriptul în Bash.
Când rulează scriptul, revenim la promptul de comandă al mașinii locale. Trecând la mașina noastră de la distanță, putem folosi cat pentru a căuta în interiorul fișierului „timestamp.txt”.
pisica timestamp.txt
Putem vedea marcajul de timp al ultimei conexiuni și numai în prezent. Rularea scriptului local de mai multe ori adaugă marcajele de timp corespunzătoare la fișierul de la distanță.
pisica timestamp.txt
Desigur, într-o situație reală, scenariul tău ar face ceva mai util. Dar chiar și exemplul nostru trivial demonstrează că un script local este executat pe un server la distanță.
Transmiterea de argumente la Script
Puteți transmite argumente de linie de comandă scriptului. Vom modifica scriptul pentru a ne aștepta trei parametrii de linie de comandă. Acestea sunt redirecționate în fișierul „timestamp.txt” împreună cu marcajul de timp.
Salvați acest script ca „local2.sh” și faceți-l executabil cu chmod
.
#!/bin/bash echo „$1 $2 $3” >> timestamp.txt data >> timestamp.txt iesirea 0
Comanda pe care trebuie să o folosim este similară cu exemplul anterior, cu câteva modificări.
ssh [email protected] „bash -s” -- < local2.sh „How-To\ Geek” „Linux” „Articole”
Cratima dublă „ --
” îi spune lui Bash că ceea ce urmează nu ar trebui să fie considerat parametri de linie de comandă pentru comanda ssh
. Cei trei parametri pentru script urmează numele scriptului, ca de obicei. Rețineți că am folosit o bară oblică inversă „ \
” pentru a scăpa de spațiul din parametrul „How-To\ Geek”.
Putem verifica cu cat
dacă parametrii noștri au fost primiți și gestionați corect pe serverul de la distanță.
pisica timestamp.txt
Rularea unei secțiuni a unui script de la distanță
Dacă aveți un script care trebuie să facă o procesare locală pentru a determina ce acțiuni ar putea fi necesare pe serverele de la distanță, puteți adăuga o secțiune chiar în acel script pentru a efectua acțiunile de la distanță pentru dvs.
Putem realiza acest lucru folosind documentele de aici. Aici documentele ne permit să redirecționăm linii dintr-o secțiune etichetată a unui script într-o comandă. Prelucrarea locală poate fi efectuată deasupra și sub documentul de aici.
Acesta este scriptul „local3.sh”, care conține un document aici.
#!/bin/bash # procesarea locală se poate face aici # procesarea de la distanță se face aici ssh -T [email protected] << _remote_commands # comenzi care urmează să fie rulate de la distanță vor fi adăugate aici cd /home/dave/Documente # etc. # În cele din urmă, actualizați fișierul de marcaj de timp echo "Script3.sh:" $(data) >> /home/dave/timestamp.txt # aceasta este eticheta care marchează sfârșitul redirecționării _comenzi_la distanță # mai multe procesări locale se pot face aici iesirea 0
Folosim comanda ssh
cu aceleași detalii de conexiune ca înainte. Ne conectăm ca utilizator „dave” la un server la distanță numit „fedora-36.local”. De asemenea, folosim opțiunea -T
(dezactivarea alocării pseudo-terminale). Acest lucru împiedică serverul de la distanță să furnizeze un terminal interactiv pentru această conexiune.
Redirecționarea „ <<
” este urmată de numele unei etichete . În acest exemplu, folosim „_remote_commands”. Nu este nimic special la această etichetă, este pur și simplu o etichetă.
Toate comenzile care apar pe liniile care urmează redirecționării sunt trimise prin conexiunea SSH. Redirecționarea se oprește atunci când este întâlnită eticheta. Execuția scriptului continuă apoi cu linia care urmează etichetei.
Să rulăm scriptul nostru mixt de procesare locală/la distanță.
./local3.sh
După cum era de așteptat, vedem o nouă intrare în fișierul „timestamp.txt”.
pisica timestamp.txt
Extindeți-vă acoperirea
Posibilitatea de a rula scripturi de la distanță – care sunt scrise, stocate și întreținute la nivel local – oferă un instrument de administrare convenabil. Știind că exact aceeași versiune a unui script rulează pe toate serverele tale la distanță, gestionarea este mult mai ușoară.
LEGATE: Cum să gestionați serverele Linux cu interfața web Cockpit