На Хабре достаточно много разработчиков работают с файлами на удаленных хостах. На локальной машине запускается 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.
Вот теперь система стала идеальной :)