Блог ИТ склеротика. Удобный доступ к файлам на удаленных хостах

Страницы

Расширенный поиск в статьях блога

28 марта 2012 г.

Удобный доступ к файлам на удаленных хостах

На Хабре достаточно много разработчиков работают с файлами на удаленных хостах. На локальной машине запускается IDE, отладчик, все необходимое, а сами файлы находятся на сервере, где они регулярно бакапятся, автобилдятся, тестируются и так далее. Очень удобный рабочий вариант. Да я сам его использую.

Единственная проблема, доставляющая неудобство — файлы все же находятся на другом компе, и доступ к ним не такой простой и прозрачный как к «своим».

Под катом — как сделать такой доступ максимально удобным. Чтобы он запускался автоматом когда надо, а самое главное — чтобы не запускался, когда не надо!

Из всех вариантов удаленного доступа к файлам: SSHFS, NFS и виндошара — SMB (не к ночи будь помянут), я выбрал SSHFS по следующим причинам:

— Максимальная простота настройки

— Работает практически везде, не требует установки на сервер хитрых компонент

— Максимальная безопасность: клиента, сервера и передаваемых данных.

Установка на Ubuntu максимально проста:

$ sudo apt-get install sshfs

При этом автоматически установится в качестве зависимостей fuse-utils и libfuse2.

Так же должна создаться группа fuse и в modconf.d пропишется загрузка модуля fuse — впрочем это зависит от вашего дистрибутива, возможно это придется проверить и подправить руками.

Для пользователей Windows есть самурайская разработка Dokan SSHFS. Качаем Dokan lib, потом dokan sshfs. Эта штука работает, но говорю сразу — я с ней практически не работал, может при длительной эксплуатации и вылезут какие-то проблемы.

Теперь все это можно легко замаунтить консольным вызовом:

$ sshfs username@server.ru:/home/user mount-point/

Но это не самый удобный вариант использования — надо каждый раз в консоли маунтить папку, конечно, можно все это прописать в /ets/fstab, но у нас есть вариант получше — Automount FUSE. Ставить опять можно из репозитариев:

$ sudo apt-get install afuse

После чего достаточно его запустить с нужными парамтерами:

afuse -o mount_template="sshfs %r:/ %m" -o unmount_template="fusermount -u -z %m" ~/sshfs/

После чего все обращения к файлам и папкам в папке ~/sshfs/ будут вызывать монтирование соответствующей папки в ~/sshfs/. После чего обращение пойдет дальше на удаленный хост. Самое главное для нас — все происходит абсолютно прозрачно при первом обращении к нужной папке из любой программы.

Например: ls ~/sshfs/tmpvar@foobarhost.com вначале малость потормозит, потом покажет содержимое корневой папки / сервера foobarhost.com. Конечно, не всегда удобно писать полный адрес и параметры доступа к серверу tmpvar@foobarhost.com:22, поэтому мы их перенесем в настройки доступа ssh.

cat ~/.ssh/config Host file-storage Hostname filestorage.server.ru Port 2222 # на сервере может быть использован нестандартный порт HostKeyAlias fs User admin

Теперь мы можем обращаться к нашему серверу по короткому имени fs как в ssh, так и в sshfs:

> ssh fs # заходим на сервер — никаких лишних настроек не надо

> ls ~/sshfs/fs # смотрим корневую папку сервера.

Если вы монтите папку первый раз, то у вас появится окошко ввода пароля для доступа к указанному серверу. После того как соединение установлено, окно больше не будет вас докучать. Как вы уже поняли — можно легко сказать окну не вылезать — сделав авторизацию на сервер по ключу.

Итак, что же мы получили?

А получили мы классную вещь — прозрачное SSHFS-монтирование папок по требованию. Это обозначает, что:

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

— но есть вещи гораздо интереснее: монтирование не запускается когда не надо! Например, вы сидите в интернет-кафе или на даче на gprs-модеме. Вот скажите, вам сильно надо чтобы при запуске ноута подключались все папки с рабочего сервера? В итоге загрузка длилась полчаса и выдавала гору ошибок? Вот это и есть главное преимущество перед прописыванием настроект в /etc/fstab — когда не надо, система вам не мешает. :)

Но человек быстро привыкает ко всему хорошему. Я перся с этой системы ровно 2 недели — а потом начал банально забывать запускать afuse :). В итоге пришлось сделать небольшой скриптец, который это будет делать за меня:

$ cat ~/bin/afuse.sh #!/bin/sh if [ ! -z `ls -d /tmp/afuse-* 2>/dev/null` ]; then echo 'Afuse is already running'; else /usr/bin/afuse -o mount_template="sshfs %r:/ %m" -o unmount_template="fusermount -u -z %m" ~/sshfs/ fi

и добавил его в автозапуск в GNOME.

Вот теперь система стала идеальной :)

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free