29Jun

"Shell" scenarijus, norint įkelti failą į tą pačią pakatalogį nuotoliniame serveryje

Labai dažna užduotys žiniatinklio kūrėjui įkelia vieną failą iš jūsų vystymosi dėžutės pakatalogio į tą pačią pakatalogį nuotoliniame serveryje. Deja, tai visada baigiasi erzinančiu rankiniu būdu, perjungiant katalogus abiejuose serveriuose ir atliekant daug laiko.

Taigi, aš paėmiau sau parašyti apvalkalo scenarijų, kad automatizuotų tai man, naudojant "scp", norint saugiai kopijuoti failus.(Svarbi šalutinė pastaba: ftp yra siaubingai nesaugi, vietoj to naudokite WinSCP)

Svarbiausia išspręsti problemą buvo ta, kad mano "WordPress" diegimas mano kūrimo mašinoje turi skirtingą pagrindinį katalogą, nei diegimas mano serveryje. Mano kūrimo mašina yra /var/ www, o mano serveryje yra kažkas panašaus į /var/www/howtogeek/docs/.Aš nusprendžiau tiesiog perkelti juos į kintamuosius scenarijaus pradžioje:

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

Atminkite, kad vietinis katalogas( LDIR) scenarijus turi \ prieš kiekvieną / keliu. Taip yra dėl to, kad vėliau šią scenarijų perduosime į komandą sed, taigi turime išvengti šių vertybių.Aš įsitikinęs, kad tai kitaip, bet aš nežinau apie tai.

Toliau aš sukūriau automatinius ssh prisijungimus. Norėdami tai padaryti, pirmiausia turite paleisti "ssh keygen" programinę įrangą taip:

ssh-keygen-t rsa

Tada reikia nukopijuoti ~ /.ssh/ id_rsa.pub failą į ~ /.ssh/ authorized_keys failą nuotoliniame serveryje. Jei ~ /. ssh katalogas jau yra sukurtas nuotoliniame serveryje( galbūt norėsite patikrinti), tada galite paleisti šią komandą, norėdami nukopijuoti raktus:

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

Dabar mes turime automatinius ssh prisijungimus, kurie leis naudoti scp įrankį be slaptažodžio. Dabar pažvelkime į scp komandą, kurią mes naudosime scenarijuje:

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

$ 1 - tai parametras, kurį jūs perduosite į scenarijų failo pavadinimui, kurį bandote įkelti.$ SSHSERVER ir $ RDIR yra kintamieji, kuriuos nustatysime scenarijaus pradžioje, kad nustatytume naudotojo @ vardą ir ankstesnį nuotolinį kelią.

Pirmas blokas, kuris prasideda pwd | sed, paima dabartinį katalogų kelią ir išbraukia ankstesnę kelio dalį, kuri neatitinka nuotolinio serverio, bet palieka likusį kelią.Pvz., Jei esate /var/www/ wp-content / paleidę komandą, sed block pašalina /var/ www pagal mūsų LDIR kintamąjį, bet palikite / wp-content / jo dalį.

Antrasis blokas tik pašalina visą ankstesnį kelią nuo failo pavadinimo, perduoto scenarijai, todėl jūs tiesiog gaunate failo vardą.

Pavyzdžiui, jei jūs paskyrėte scenarijų up.sh ir išnaudojote jį iš savo vietinio /var/www/ wp-content /plugins/ katalogo į failą:

up.sh myplugin.php

Tai būtų išplėtotas apvalkalu:

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

Vietoj bandymo kurti savo scenarijų failą, remiantis straipsniu, aš jį pateikėiu jums atsisiųsti. Tokiu būdu nebus jokių problemų, kai specialieji simboliai neveikia. .. ir taip, aš naudoju scenarijų įkelti pats =)

Parsisiųsti geek-uploader.sh

Tiesiog įdėti jį kažkur savo kelyje ir pavadinkite tai, ką norite. Aš pervadino pavadinimą "up", todėl galiu tiesiog įkelti "up filename.txt" įkelti. Taip pat nepamirškite atidaryti ir pakeisti scenarijaus pradžioje esančius kintamuosius, kad jie atitiktų jūsų aplinką.

Šis scenarijus turėtų dirbti su visais su "* nix" apvalkalu ir programa SCP.Aš naudoju "Ubuntu", bet jis turėtų veikti su "Cygwin", "Solaris", "OS X" ar net "Windows".