Si të ekzekutoni një Skript Lokal Shell në një Server SSH në distancë


Problemi me ekzekutimin e komandave mbi SSH është se në përgjithësi ju ose duhet t'i shkruani ato vetë ose të ngarkoni një skedar skripti. Megjithatë, me pak njohuri bash, mund të kaloni skripte të tëra mbi SSH pa pasur skedarin .sh në makinën në distancë.

Zgjidhja: Kaloni skriptin mbi hyrjen standarde

Komanda SSH ka një modalitet ku mund të ekzekutoni çdo komandë të vetme në një server të largët. Për të ekzekutuar komanda të shumta, do t'ju duhet të përdorni hakun e mëposhtëm:

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

Komanda bash -s do të thotë ekzekutoni komandat e mëposhtme në një sesion të ri bash. Flamuri -s e bën atë të lexohet nga hyrja standarde dhe biti < script.sh do të lexojë një skedar skripti lokal në hyrjen standarde.

Skedari lexohet tërësisht në nivel lokal dhe i gjithë dërgohet në serverin në distancë pa ngarkuar asgjë. Kjo kërkon që të vendosni të gjitha komandat në një skedar të veçantë skripti.

Ekzekutimi i shumë komandave në distancë brenda një skripti

Nëse dëshironi të ekzekutoni një pjesë të një skripti shell në një server tjetër, por jo të gjithë, mund të përfshini blloqe të mbivendosura si më poshtë në skriptin tuaj:

ssh user@remotehost 'bash -s' <<'ENDSSH'
  # The following commands run on the remote host
  echo "test"
  cd /home/
  pwd
ENDSSH

Kjo funksionon sepse bash -s po pret çdo lloj hyrje standarde. Direktiva < krijon një strukturë dokumenti këtu, në thelb duke kaluar të gjitha karakteret midis tij dhe mbarimit ENDSSH në hyrjen standarde, dhe rrjedhimisht te hosti i largët mbi SSH.

Të bësh në këtë mënyrë do të thotë që mund të ruash gjithçka në një skedar skripti, në vend që të bësh një të ri për të ekzekutuar në telekomandë.