/ / Сценарій оболонки для завантаження файлу в той самий підкаталог на віддалений сервер

Сценарій оболонки для завантаження файлу в той самий підкаталог на віддалений сервер

Дуже поширене завдання для веб-розробниказавантаження одного файлу з підкаталогу у вікні розробки до того ж підкаталогу на віддаленому сервері. На жаль, це завжди виявляється дратівливим ручним процесом, що включає перемикання каталогів на обох серверах і витрачає велику кількість часу.

Отже, я взяв на себе обов'язок написати сценарій оболонки, щоб автоматизувати це для мене, використовуючи scp для безпечного копіювання файлів. (Важлива бічна примітка: ftp жахливо небезпечно, замість цього використовуйте WinSCP)

Основна проблема, яку потрібно вирішити, полягала в тому, що моя WordPressУстановка на моїй розробній машині має інший базовий каталог, ніж установка на моєму сервері. На моїй розробній машині це / var / www, а на моєму сервері щось подібне / var / www / howtogeek / docs /. Я вирішив просто перемістити їх у змінні на початку сценарію, як це:

SSHSERVER=thegeek@hostname.com
RDIR = / var / www / howtogeek / docs
LDIR = '/ var / www'

Зауважте, що локальний каталог (LDIR) у сценаріїмає перед кожним / у шляху. Це тому, що ми збираємося передати це в команду sed пізніше в сценарії, тому нам доведеться уникати цих значень. Я впевнений, що існує щось інше, але я цього не знаю.

Далі я налаштовував автоматизовані вхідні дані ssh. Для цього потрібно спочатку запустити утиліту ssh keygen так:

ssh-keygen -t rsa

Потім потрібно скопіювати ~ / .ssh / id_rsa.файл pub до ~ / .ssh / avtor_keys файлу на віддаленому сервері. Якщо каталог ~ / .ssh вже створений на віддаленому сервері (можливо, потрібно перевірити), ви можете запустити цю команду для копіювання ключів:

кіт ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / autorizirani_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 thegeek@hostname.com: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php

Замість того, щоб намагатися створити власний файл сценаріюна основі статті, я надав її для завантаження. Так не виникне жодних проблем із тим, що спеціальні символи не працюють ... та так, я використовував сценарій для завантаження =)

Завантажте geek-uploader.sh

Просто поставте його десь на своєму шляху і назвіть йогощо завгодно. Я перейменував шахту лише на "вгору", тому я можу просто набрати "up filename.txt" для завантаження. Також не забудьте відкрити його та змінити змінні на початку сценарію, щоб відповідати вашому середовищу.

Цей сценарій повинен працювати над чим-небудь із оболонкою * nix та утилітою scp. Я використовую Ubuntu, але він повинен працювати на Solaris, OS X або навіть Windows із встановленим Cygwin.