29Jun

Skript Shell na odovzdanie súboru do rovnakého podadresára na vzdialenom serveri

click fraud protection

Veľmi bežná úloha pre webového vývojára je odovzdanie jedného súboru z podadresára vo vašom vývojovom okne do rovnakého podadresára na vzdialenom serveri. Bohužiaľ, to vždy skončí ako rušivý manuálny proces zahŕňajúci prepínanie adresárov na oboch serveroch a zlikviduje veľa času.

Tak som si vzal na seba napísať shell skript automatizovať to pre mňa, pomocou scp pre bezpečné kopírovanie súborov.(Dôležitá poznámka: ftp je hrozne neistý, namiesto toho použite WinSCP)

Hlavným problémom, ktorý som vyriešil, bolo to, že môj WordPress nainštalovaný na vývojovom stroji má iný základný adresár ako inštalácia na mojom serveri. Na svojom vývojovom stroji je /var/ www, a na mojom serveri je niečo viac ako /var/www/howtogeek/docs/.Rozhodol som sa jednoducho presunúť tieto do premenných na začiatku skriptu takto:

[email protected]
RDIR = /var/www/howtogeek/ docs
LDIR = '\ / var \ / www'

Všimnite si, že lokálny adresár( LDIR) v skripte má \ pred každým / v ceste. Je to preto, že to prenesieme do príkazu sed neskôr v skripte, takže musíme uniknúť týmto hodnotám. Som si istý, že je to niečo iné, ale o tom neviem.

instagram viewer

Potom nastavím automatické prihlásenie ssh. Aby ste to urobili, musíte najprv spustiť nástroj ssh keygen takto:

ssh-keygen -t rsa

Potom musíte na vzdialenom serveri skopírovať súbor ~ /.ssh/ id_rsa.pub do súboru ~ /.ssh/ authorized_keys. Ak je adresár ~ /. ssh už vytvorený na vzdialenom serveri( možno budete chcieť skontrolovať), potom môžete spustiť tento príkaz na kopírovanie kľúčov:

cat ~ /.ssh/ id_rsa.pub |ssh user @ hostname 'cat & gt; & gt;.ssh / authorized_keys '

Teraz máme automatické prihlásenia ssh, ktoré umožnia použiť nástroj scp bez hesla. Teraz sa pozrime na príkaz scp, ktorý použijeme v skripte:

scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/` echo $ 1 | sed 's /.* \ /// ''

$ 1 je parameter, ktorý odovzdáte skriptu pre názov súboru, ktorý sa pokúšate nahrať.$ SSHSERVER a $ RDIR sú premenné, ktoré nastavíme na začiatku skriptu, aby sme nastavili meno používateľa @ hostname a predchádzajúcu vzdialenú cestu.

Prvý blok začínajúci pwd | sed preberá aktuálnu cestu k adresáru a preruší predchádzajúcu časť cesty, ktorá sa nezhoduje so vzdialeným serverom, ale zanecháva zvyšok cesty. Napríklad, ak ste boli v /var/www/ wp-content / pri spustení príkazu, sed blok by strihol /var/ www na základe našej premennej LDIR, ale ponechať / wp-content / časť z nej.

Druhý blok jednoducho znižuje celú predchádzajúcu cestu z názvu súboru preneseného do skriptu, takže dostanete len názov súboru.

Napríklad, ak ste pomenovali skript up.sh a spustili ho z miestneho adresára /var/www/ wp-/plugins/ v súbore:

up.sh myplugin.php

Toto by bolo rozšírené o shell ako nasledovné:

scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-obsah /plugins/ myplugin.php

Namiesto toho, aby ste sa pokúsili vytvoriť svoj vlastný skriptový súbor na základe článku, poskytol som ho na stiahnutie. Takže tam nebudú žiadne problémy so špeciálnymi znakmi nefunguje. .. a áno, použil som skript na upload sám =)

Stiahnuť geek-uploader.sh

Stačí dať niekde vo vašej ceste, a meno to, čo chcete. Premenoval som môj na "up", takže môžem jednoducho napísať "up filename.txt" na upload. Tiež si nezabudnite otvoriť ho a zmeniť premenné na začiatku skriptu tak, aby zodpovedali vášmu prostrediu.

Tento skript by mal pracovať na čokoľvek s shellom * nix a nástrojom scp. Používam Ubuntu, ale mala by pracovať na Solaris, OS X, alebo dokonca Windows so systémom Cygwin.