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

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

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

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

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

    [email protected]
    RDIR = / var / www / howtogeek / docs
    LDIR = "\ t

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

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

    ssh-keygen -t rsa

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

    cat ~ / .ssh / id_rsa.pub | ssh user @ ім'я хоста 'cat >> .ssh / authorized_keys'

    Тепер у нас є автоматизовані входи ssh, які дозволять використовувати утиліту scp без пароля. Тепер давайте подивимося на команду scp, яку будемо використовувати в сценарії:

    scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed “s / $ LDIR //” '/' echo $ 1 | sed 's /.* \ t

    $ 1 є параметром, який ви перейдете до сценарію для назви файлу, який ви намагаєтеся завантажити. $ SSHSERVER і $ RDIR є змінними, які ми встановимо на початку скрипту, щоб встановити ім'я користувача @ hostname і попередній віддалений шлях.

    Перший блок, який починається з pwd | sed, приймає поточний шлях до каталогу і видаляє попередню частину шляху, який не відповідає віддаленому серверу, але залишає решту шляху. Наприклад, якщо ви працювали в / var / www / wp-content /, коли ви запускали команду, блок sed видалив би / var / www на основі нашої змінної LDIR, але залишимо її / wp-content / part of.

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

    Наприклад, якщо ви назвали скрипт 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", щоб я міг просто ввести "up filename.txt" для завантаження. Також не забувайте відкривати його і змінювати змінні на початку сценарію, щоб вони відповідали вашому середовищу.

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