Úvodná » ako » Shell Script na odovzdanie súboru do rovnakého podadresára na vzdialenom serveri

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

    Veľmi bežná úloha webového vývojára nahráva jeden súbor 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ľké množstvo času.

    Takže 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á bočná poznámka: ftp je strašne neistý, namiesto toho používa WinSCP)

    Hlavným problémom, ktorý som vyriešil, bolo, že môj WordPress inštalácia na vývojovom stroji má iný základný adresár ako inštalácia na mojom serveri. Na 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 scenára, ako je toto:

    [email protected]
    RDIR = / var / www / howtogeek / dokumenty
    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 na príkaz sed neskôr v skripte, takže musíme uniknúť týmto hodnotám. Som si istý, že je to niečo iné, ale neviem to.

    Ďalej som nastavil automatické prihlásenie ssh. Aby ste to dosiahli, 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 (môže sa to chcieť skontrolovať), môžete spustiť tento príkaz na kopírovanie kľúčov:

    cat / .ssh / id_rsa.pub | ssh meno používateľa @ hostname 'cat >> .ssh / authorized_keys'

    Teraz máme automatické prihlásenia ssh, ktoré umožnia používať 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 odovzdať. $ 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, ktorý začína pwd | sed, preberá aktuálnu cestu k adresáru a odtrhne od predchádzajúcej časti 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 vyňal / var / www na základe našej premennej LDIR, ale ponechajte / wp-content /.

    Druhý blok jednoducho zbavuje 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-content / plugins / v súbore:

    up.sh myplugin.php

    To by bolo rozšírené shell ako nasledovné:

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

    Namiesto toho, aby ste sa pokúšali vytvoriť vlastný skriptový súbor na základe článku, poskytol som vám ho na stiahnutie. Týmto spôsobom nebudú žiadne problémy so špeciálnymi znakmi, ktoré nefungujú ... a áno, použil som skript na nahrávanie =)

    Stiahnite si geek-uploader.sh

    Stačí ho dať niekde vo svojej ceste a pomenovať to, čo chcete. Premenoval som na mňa na "up", takže môžem len nahrať "up filename.txt". Tiež si nezabudnite otvoriť ho a zmeniť premenné na začiatku skriptu tak, aby zodpovedali vášmu prostrediu.

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