Skip to main content

Shell Script для завантаження файлу до того самого підкаталогу на віддаленому сервері

Shell Script для завантаження файлу до того самого підкаталогу на віддаленому сервері

Geoffrey Carr

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

Отже, я прийняв на себе написання сценарію оболонки, щоб автоматизувати це для мене, використовуючи 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 [email protected] ‘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" для завантаження. Також пам'ятайте, щоб відкрити його та змінити змінні на початку скрипту, щоб вони відповідали вашому середовищу.

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

Link
Plus
Send
Send
Pin