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

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

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

Видео: Сценарий оболочки для загрузки файла в один и тот же подкаталог на удаленном сервере
Видео: Настройки Safari - YouTube 2024, Май
Anonim

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

Итак, я взял на себя обязательство написать сценарий оболочки для автоматизации этого для меня, используя scp для безопасного копирования файлов. (Важная сторона Примечание: ftp ужасно небезопасен, вместо этого используйте WinSCP)

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

[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’

Обратите внимание, что локальный каталог (LDIR) в скрипте имеет перед каждым / в пути. Это потому, что мы собираемся передать это в команду sed позже в скрипте, поэтому нам нужно избежать этих значений. Я уверен, что есть что-то еще, но я не знаю об этом.

Затем я настроил автоматические ssh-логины. Для этого вам нужно сначала запустить утилиту ssh для работы с такими же файлами:

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 - это переменные, которые мы будем устанавливать в начале скрипта, чтобы установить имя пользователя @ hostname и предыдущий удаленный путь.

Первый блок, который начинается с 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.

Рекомендуемые: