Egy webfejlesztő nagyon gyakori feladata, hogy egyetlen fájlt töltsön fel a fejlesztői mező alkönyvtárából egy távoli kiszolgáló azonos alkönyvtárába. 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.
Szóval, magamra vittem, hogy írjon egy shell parancsfájlt, amely automatizálja ezt nekem, a scp használatával a biztonságos fájlmásoláshoz. (Fontos oldal Megjegyzés: az ftp szörnyen bizonytalan, használja a WinSCP-t)
A megoldandó probléma az volt, hogy a fejlesztőgépemre telepített WordPress más 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 valami hasonlít a / var / www / howtogeek / docs / fájlra. Úgy döntöttem, hogy csak a forgatókönyv elején változtattam őket változókkal:
[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’
Ne feledje, hogy a szkriptben található helyi könyvtár (LDIR) mindegyike mindegyik / az útvonalon van. 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 futtassa az ssh keygen segédprogramot, így:
ssh-keygen -t rsa
Ezután át kell másolnia a ~ /.ssh / id_rsa.pub fájlt a ~ /.ssh / authorized_keys fájlra 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 >>.ssh/authorized_keys’
Most már van automatizált ssh bejelentkezésünk, amely lehetővé teszi a scp segédprogram használatát jelszó nélkül. Most vessünk egy pillantást a scp parancsra, amelyet a szkriptben használunk:
scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`
Az 1 dollár az a paraméter, amelyet a feltölteni kívánt fájlnévhez a szkripthez ad. $ 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.
Az első blokk, amely a pwd | sed-el kezdődik, átveszi az aktuális könyvtárútvonalat, é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 a parancs végrehajtásakor a / var / www / wp tartalomban voltál, a sed blokk az LDIR változó alapján levágja a / var / www-t, de hagyja el a / wp tartalom.
A második blokk csak gondoskodik róla, 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 egy fájlban:
up.sh myplugin.php
Ezt a kagyló a következőképpen bővítette volna:
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Ahelyett, hogy megpróbálná létrehozni a saját szkriptfájlomat a cikk alapján, megadtam neked letöltést. Így nem lesz olyan probléma, ahol a speciális karakterek nem működnek … és igen, a szkriptet feltöltöttem =)
Töltse le a geek-uploader.sh fájlt
Csak helyezze valahol az útjába, és nevezze el, amit akarsz. Á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-ról a Cygwin telepítésével kell működnie.