Много често срещана задача за уеб програмист е качването на един файл от поддиректория в кутията за разработка на същата поддиректория на отдалечен сървър. За съжаление, това винаги завършва като досаден ръчен процес, включващ пренасочване на директории и на двата сървъра, и много време губи.
Така че, аз си помислих да напиша шрифт, за да автоматизирам това за мен, като използвам SCP за сигурно копиране на файлове. (Важна страна бележка: ftp е ужасно несигурен, вместо това използвайте WinSCP)
Основният проблем, който трябва да се реши, е, че моята WordPress инсталация на моята машина за разработка има различна базова директория от инсталацията на моя сървър. На моята машина за разработка е / var / www, а на сървъра ми е нещо повече като / var / www / howtogeek / docs /. Реших просто да ги преместите в променливи в началото на сценария, като това:
[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’
Обърнете внимание, че локалната директория (LDIR) в скрипта има преди всяко / в пътя. Това е така, защото ще предадем това в командата sed по-късно в скрипта, така че трябва да избягаме от тези ценности. Сигурен съм, че има някакъв друг начин около това, но не го знам.
След това зададох автоматизирани записи ssh. За да направите това, първо трябва да изпълните софтуера ssh keygen така:
ssh-keygen -t rsa
След това трябва да копирате файла ~ /.ssh / id_rsa.pub във файла ~ /.ssh / authorized_keys на отдалечения сървър. Ако директорията ~ /.ssh вече е създадена на отдалечения сървър (може би искате да проверите), тогава можете да изпълните тази команда, за да копирате клавишите:
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’
Сега имаме автоматизирани записи ssh, които ще позволят използването на помощната програма scp без парола. Сега нека разгледаме командата scp, която ще използваме в скрипта:
scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`
$ 1 е параметърът, който ще предавате на скрипта за името на файла, който се опитвате да качите. $ SSHSERVER и $ RDIR са променливи, които ще зададем в началото на скрипта, за да настроим името на хоста на потребителя и предишния отдалечен път.
Първият блок, който започва с pwd | sed, поема текущия пътека на директорията и излиза от предходната част на пътя, който не съответства на отдалечения сървър, но оставя останалата част от пътя. Например, ако сте били в / var / www / wp-content / когато сте изпълнявали командата, sed блокът би премахнал / var / www въз основа на нашата променлива LDIR, но оставя / wp-content /,
Вторият блок просто премахва целия предишен път от името на файла, предавано на скрипта, така че просто да получите името на файла.
Ако например нарекохте скрипта up.sh и го изпълнихте от локалното / var / www / wp-content / plugins / директорията на файл:
up.sh myplugin.php
Това би било разширено от черупката, както следва:
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Вместо да се опитвате да създадете свой собствен скрипт файл въз основа на статията, аз ви предоставих да го изтеглите. По този начин няма да има проблеми със специални символи, които не работят … и да, използвах скрипта, за да се кача =)
Изтегляне на geek-uploader.sh
Просто го поставете някъде по пътя си и го наречете каквото искате. Преименувах моя просто на "горе", така че мога просто да въведете "up filename.txt", за да качите. Също така не забравяйте да я отворите и променете променливите в началото на скрипта, за да съответства на вашата среда.
Този скрипт трябва да работи върху всичко с shell * nix и помощната програма scp. Използвам Ubuntu, но трябва да работи на Solaris, OS X или дори на Windows с Cygwin инсталиран.