четверг, 27 сентября 2012 г.

Linux: Bash-скрипт для монтирования удалённых директорий по SSH или FTP (v0.3)

Приветствую читателя! На днях для использования в работе написал небольшой bash-скрипт для монтирования удалённых директорий по протоколу SSH или FTP, чтобы работать с проектом как с локальной директорией. Возможно читателю пригодится.

Чтобы монтировать удалённые SSH-директории — вам понадобится утилита sshfs.
Для Debian или Ubuntu достаточно выполнить:
sudo apt-get install sshfs
Fedora:
sudo yum install fuse-sshfs

Чтобы монтировать по FTP нам понадобится CurlFtpFS.
Debian/Ubuntu:
sudo apt-get install curlftpfs
Fedora:
sudo yum install curlftpfs

Этот скрипт не работает сам по себе, он выступает в роли прототипа, в своём рабочем скрипте вы просто подключаете его в конец файла (см. далее).

В моём случае так: у меня есть директория в домашнем каталоге, в которой содержится набор пустых директорий под проекты, в которые будут смонтированны удалённые директории. И рядом с этими директориями лежат маленькие скрипты для каждого проекта, в которых указаны пути (удалённый и локальный, точка монтирования то-бишь), сервер, тип монтирования и подключен этот самый скрипт, о котором идёт речь, и этот скрипт лежит в этой же директории.

Выберите место для этих экспериментов, например:
mkdir ~/some_place && cd ~/some_place
Сохраните в эту директорию этот самый скрипт с именем mount.sh (ну или как вам больше нравится.

Теперь создайте пустую директорию, в которую будет смонтирована удалённая директория:
mkdir remote_dir
И далее создаём маленький скрипт (к примеру с именем remote_dir.mount) для монтирования удалённой директории в локальную:
#/bin/bash
cd "$(dirname "$0")" # на случай если скрипт будет запущен с рабочей директорией, отличной от той, в которой лежит скрипт
MOUNT_TYPE="SSH" # или указываем "FTP"
LOGIN="user" # если не указать эту переменную, будет взят текуйщий пользователь, который запустил скрипт
SERVER="domain.org" # домен удалённого сервера
REMOTE_PATH="/home/user/remote_dir" # путь на удалённом сервере
LOCAL_PATH="~/some_place/remote_dir" # локальный путь до точки монтирования
source mount.sh # собственно подключаем скачанный скрипт
Не забываем дать права на исполнение (давать права на исполнение файлу mount.sh не обязательно):
chmod +x remote_dir.mount
Теперь для монтирования вам достаточно вызвать в консоли:
./remote_dir.mount
А чтобы отмонтировать:
./remote_dir.mount -u
или
./remote_dir.mount --unmount

Обратите внимание, что для того, чтобы в указанный путь смонтировалась директория (будь она удалённой или нет), — нужно чтобы по этому пути уже существовала пустая директория (особенности монтирования в linux).

Также хочу обратить внимание на то, что если у вас нестабильный интернет и произошёл разрыв в то время, когда была смонтирована удалённая директория, — файловая система будет дико и намертво залипать, особенно при входе в директорию, где находится точка монтирования. Открываем консоль, сначала никуда не переходим (лучше не монтировать удалённую директорию прямо в домашний каталог, ведь если по-умолчанию в терминале вы попадаете в домашнюю директорию — терминал повиснет), теперь нужно принудительно убить процесс sshfs:
killall -9 sshfs
А после нужно отмонтировать нашим скриптом удалённую директорию:
~/some_place/remote_dir.mount -u
После этих действий — система вернётся в рабочее состояние.

Скачать скрипт

Комментариев нет:

Отправить комментарий