29Jun
A webfejlesztő számára nagyon gyakori feladat egy fájl egyetlen állományból történő feltöltése egy fejlesztési mezőből származó alkönyvtárba ugyanazon alkönyvtárhoz egy távoli kiszolgálón. Sajnos ez mindig úgy tűnik, hogy egy bosszantó manuális folyamat, amely során mindkét szerverre váltogatnak a könyvtárak, és nagy mennyiségű időt veszít el.
Így aztán magamról írtam egy shell parancsfájlt, amely automatizálja ezt nekem, a scp használatával a biztonságos fájlmásoláshoz.(Fontos Side Megjegyzés: Az ftp nem túl biztonságban, hanem WinSCP helyett)
A legfontosabb probléma, hogy a WordPress telepítése a fejlesztőgépemen eltérő alapkönyvtárral rendelkezik, mint a kiszolgálón lévő telepítés. A fejlesztõgépemen /var/ www, és a kiszolgálón is valami hasonló /var/www/howtogeek/docs/.Úgy döntöttem, hogy ezeket a változókat a script kezdetekor áthelyezem a változókra:
[email protected]
RDIR = /var/www/howtogeek/ docs
LDIR = '\ / var \ / www'
A helyi könyvtár( LDIR) a szkriptben \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ /Ennek az az oka, hogy később a szkriptben egy sed parancsot adunk át, ezért el kell kerülnünk ezeket az értékeket. Biztos vagyok benne, hogy van valami más módja ennek, de nem tudom.
Ezután létrehoztam az automatizált ssh bejelentkezéseket. Ehhez először az ssh keygen segédprogramot kell futtatni:
ssh-keygen -t rsa
A ~ /.ssh/ id_rsa.pub fájlt az /.ssh/ authorized_keys fájlra kell átmásznia a távoli kiszolgálón. Ha a ~ /. ssh könyvtár már létre van hozva a távoli kiszolgálón( ellenőrizni szeretné), akkor futtathatja ezt a parancsot a kulcsok átmásolásához:
cat ~ /.ssh/ id_rsa.pub |ssh user @ hostname 'cat & gt; & gt;.ssh / authorized_keys '
Most már van automatizált ssh login, amely lehetővé teszi az scp segédprogram használatát jelszó nélkül. Most vessünk egy pillantást a scp parancsra, amelyet a script-ben használunk:
scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed / s ${ LDIR} // "` / `echo $ 1 | sed 's /.* \ /// ''
Az $ 1 az a paraméter, amelyet átmásol a szkripthez a feltölteni kívánt fájlnévhez.$ SSHSERVER és $ RDIR változók, amelyeket a szkript elején állítunk be a felhasználó @ hostname és az előző távoli elérési útvonal beállításához.
A pwd | sed-el kezdődő első blokk az aktuális könyvtárútvonalat veszi fel, és levágja az út előző részét, amely nem egyezik a távoli kiszolgálóval, hanem hagyja el az utat. Például ha /var/www/ wp-tartalomban vagy a parancs végrehajtásakor voltál, a sed blokk az LDD változónk alapján levágja az /var/ www-t, de hagyja el a / wp-content / part of it.
A második blokk csak azt biztosítja, hogy a teljes előző elérési utat levegye a parancsfájlról átadott fájlnévre, így csak megkapja a fájlnevet.
Például ha a parancsfájlt felfelé írtuk és futtattuk a helyi /var/www/ wp-content /plugins/ könyvtárból:
up.sh myplugin.php
Ez a kiterjesztés a következőképpen bővült:
scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-content /plugins/ myplugin.php
A cikken alapuló saját szkriptfájl készítésének helyett a letöltést elvégeztem.Így nem lesz olyan probléma, amiben a speciális karakterek nem működnek. .. és igen, a scriptet feltöltöttem =)
Letöltés geek-uploader.sh
Csak helyezze valahol az útjába, és nevezze el, amit csak akar.Átneveztem az enyéimet, hogy csak "fel", így csak írhattam fel "up filename.txt" feltölteni. Ne felejtse el megnyitni és megváltoztatni a változókat a szkript elején, hogy megfeleljen a környezetnek.
Ez a parancsfájl a * nix shell és az scp segédprogrammal foglalkozik. Ubuntu-t használok, de a Solaris-on, az OS X-en, vagy a Windows-on a Cygwin telepítésével kell működnie.