Vrlo uobičajena zadaća za razvojnog programera web-mjesta je da prenesete jednu datoteku iz poddirektorij na vašem razvojnom okviru u isti poddirektorij na udaljenom poslužitelju. Nažalost, ovo uvijek završava kao neugodan ručni postupak koji uključuje prebacivanje direktorija na oba poslužitelja i gubi veliku količinu vremena.
Dakle, shvatio sam da pišem skriptu ljuske za automatizaciju za mene, koristeći scp za sigurno kopiranje datoteka. (Važna strana Napomena: ftp je strašno nesiguran, umjesto toga koristite WinSCP)
Glavni problem za rješavanje bio je da moj WordPress instalira na moj razvojni stroj ima drugačiji bazni direktorij od instalacije na moj poslužitelj. Na mojem stroju za razvoj je / var / www, a na mom poslužitelju nešto više nalik / var / www / howtogeek / docs /. Odlučio sam ih premjestiti u varijable na početku skripte, ovako:
[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’
Imajte na umu da lokalni direktorij (LDIR) u skripti ima prije svake / na putu. To je zato što ćemo ovo kasnije predati u naredbu skripta, stoga moramo izbjeći te vrijednosti. Siguran sam da postoji neki drugi način oko ovoga, ali nisam svjestan toga.
Zatim postavljam automatske ssh prijave. Da biste to učinili, prvo morate pokrenuti uslužni program ssh keygen tako da:
ssh-keygen -t rsa
Tada morate kopirati datoteku ~ /.ssh / id_rsa.pub na ~ /.ssh / authorized_keys datoteku na udaljenom poslužitelju. Ako je ~ /.ssh direktorij već stvoren na udaljenom poslužitelju (možda želite provjeriti), možete pokrenuti ovu naredbu da biste kopirali ključeve preko:
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’
Sada imamo automatizirane ssh prijave, koje će omogućiti upotrebu uslužnog programa scp bez lozinke. Pogledajmo sada scp naredbu koju ćemo koristiti u skripti:
scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`
$ 1 je parametar koji ćete proslijediti na skriptu za naziv datoteke koji pokušavate prenijeti. $ SSHSERVER i $ RDIR su varijable koje ćemo postaviti na početku skripte da postavimo korisničko ime @ i prethodni udaljeni put.
Prvi blok koji započinje s pwd | sed uzima trenutni put direktorija i uklanja prethodni dio staze koji ne odgovara udaljenom poslužitelju, ali ostavlja ostatak puta. Na primjer, ako ste bili u / var / www / wp-content / kada ste pokrenuli naredbu, sed-blok blokira / var / www na temelju naše LDIR varijable, ali ostavite / wp-sadržaj / dio,
Drugi blok samo osigurava uklanjanje cijele prethodne staze od filename koji se prenosi na skriptu tako da jednostavno dobijete naziv datoteke.
Na primjer, ako ste nazvali skriptu up.sh i pokrenuli ga s lokalnog / var / www / wp-content / plugins / direktorija na datoteci:
up.sh myplugin.php
To bi se širilo kao ljuska kao sljedeće:
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Umjesto da pokušavate stvoriti vlastitu datoteku skripte na temelju članka, predajem vam da preuzmete. Na taj način neće biti bilo kakvih problema s posebnim likovima koji ne rade … i da, koristio sam skriptu za upload samog =)
Preuzmite geek-uploader.sh
Samo ga stavite negdje na put i nazovite ga što god želite. Preimenovala sam samo na "gore", tako da mogu upisati "up filename.txt" za upload. Također zapamtite da je otvorite i promijenite varijable na početku skripte kako bi odgovarale vašem okruženju.
Ova skripta bi trebala raditi na bilo čemu s * nix shell i scp programom. Koristim Ubuntu, ali to bi trebalo raditi na Solarisu, OS X-u ili čak Windowsu s Cygwin instaliranim.